我们可以控制ListView中fling的结束位置

时间:2011-11-07 13:14:17

标签: android android-listview

我有一个包含一组TextViews的简单ListView。

我总是希望页面顶部的TextView顶部。

我可以使用onScrollStateChanged并在SCROLL_STATE_IDLE中稍微调整一下位置。 (类似于List view snap to item
但这是一个后验修正,不能很顺利地进行修正。

是否有可能先控制一次投掷的结束位置? 所以我想在开始投掷后立即修改投掷的结束位置。

这可能吗?

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 个答案:

答案 0 :(得分:1)

遵循基本的物理定律: 设s(距离),v(速度),t(时间)和(减速加速度)。

对于给定的初始速度(从s_0 = 0开始),我们有

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

a是一个系统常量(不知道哪个API)。 因此,对于给定的初始速度v_0

,您可以计算
  • from(1):v(t)将变为零的t(=>结束)
  • from(2):得到的距离

通过反转计算,您可以计算结束位置'

所需的初始速度