2011-11-07 9 views
5

içinde kontrol edebiliriz Bir TextViews kümesi içeren basit bir ListViewim var.Bir atlayışın son konumunu bir ListView

Her zaman bir TextView'ın en üstünde, sayfanın en üstünde olmasını istiyorum.

onScrollStateChanged'ı kullanabilir ve SCROLL_STATE_IDLE öğesinde bir konum ayarlayabilirsiniz. (List view snap to item benzeri)
Fakat bu çok düzgün çalışmayan bir a-posteriori düzeltmedir.

Bir atletin son pozisyonunu kontrol etmek mümkün mü?
Bu yüzden, atlatma başlatılır başlatılmaz, bir bitiş çizgisinin konumunu değiştirmek istiyorum.

Bu mümkün mü? Let s (mesafe), V (hız), t, (Zaman) ve a (yavaşlama ivmesi):

import android.app.Activity; 
import android.os.Bundle; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.BaseAdapter; 
import android.widget.LinearLayout; 
import android.widget.ListView; 
import android.widget.TextView; 

public class Test extends Activity 
{ 
private final static int N = 20;//number of HorizontalScrollView 


@Override 
protected void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    LinearLayout layout = new LinearLayout(this); 
    //add a ListView 
    ListView list = new ListView(this); 
    layout.addView(list); 
    list.setAdapter(new BaseAdapter() 
    { 

     @Override 
     public View getView(int position, View convertView, ViewGroup parent) 
     { 
      TextView t = new TextView(Test.this); 
      t.setText("line "+position); 
      t.setMinimumHeight(120); 
      return t; 
     } 

     @Override 
     public long getItemId(int position) 
     { 
      return 0; 
     } 

     @Override 
     public Object getItem(int position) 
     { 

      return null; 
     } 

     @Override 
     public int getCount() 
     { 
      return N; 
     } 
    }); 

    setContentView(layout); 

} 


} 
+1

hiç bir çözüm buldunuz sona gerekiyordu başlangıç ​​hızını hesaplayabilir? – rekire

+0

evet, aşağıdaki cevaba bakınız –

+0

Son olarak bir cevap. Harika! Ne yazık ki neden ihtiyacım olduğunu hatırlayamıyorum: -D – rekire

cevap

1

fırlatmak temel fizik kanunları izler. verilen bir başlangıç ​​hızı için

(s_0 = 0 başlayarak), biz

v(t) = a*t + v_0 (1) 
s(t) = a*t^2+v*t (2) 

sahip bir sistem, sabit (kalp API biliyorum yok) 'dir. Bu nedenle, (1) den

  • v_0 verilen bir başlangıç ​​hızı, hesaplaması: t ki v (t) için sıfır (atmak ait => sonu)
  • olur (2): hesaplamasını tersini By çıkan mesafesi

, bir pozisyonda 's'