2011-11-07 15 views
5

Tôi có một ListView đơn giản có chứa một tập hợp các TextViews.Chúng tôi có thể kiểm soát vị trí kết thúc của một lần thoát trong một ListView

Tôi luôn muốn phần trên cùng của một TextView ở đầu trang.

Tôi có thể sử dụng onScrollStateChanged và điều chỉnh vị trí một chút trong SCROLL_STATE_IDLE. (tương tự như List view snap to item)
Nhưng đây là một chỉnh sửa sau khi không hoạt động rất trơn tru.

Có thể kiểm soát, ưu tiên, vị trí kết thúc của một lần thoát không?
Vì vậy, tôi muốn sửa đổi vị trí kết thúc của một lần chạy trốn ngay sau khi khởi động.

Điều này có khả thi không?

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

bạn đã bao giờ tìm thấy một giải pháp? – rekire

+0

có, xem câu trả lời bên dưới –

+0

Cuối cùng là câu trả lời. Tuyệt quá! Đáng tiếc là tôi không thể nhớ tại sao tôi lại cần điều đó :-D – rekire

Trả lời

1

Các fling sau luật vật lý cơ bản: Hãy s (khoảng cách), v (tốc độ), t (thời gian) và một (tăng tốc giảm tốc).

Đối với một tốc độ ban đầu cho trước (bắt đầu từ s_0 = 0), chúng tôi có

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

một là một hệ thống liên tục (không biết bằng trái tim mà API). Do đó bạn có thể tính toán, đối với một tốc độ ban đầu cho v_0

  • từ (1): t mà v (t) sẽ trở thành số không (=> cuối fling)
  • từ (2): kết quả khoảng cách

Bằng cách đảo ngược việc tính toán, bạn có thể tính toán tốc độ ban đầu cần thiết để kết thúc ở một vị trí 's'

Các vấn đề liên quan