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

Mar*_*ele 5 android android-listview

我有一个包含一组TextView的简单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);

}


}
Run Code Online (Sandbox Code Playgroud)

Mar*_*ele 1

投掷遵循基本物理定律:设 s(距离)、v(速度)、t(时间)和 a(加速度或减速度)。

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

v(t) = a*t + v_0   (1)
s(t) = a*t^2+v*t   (2)
Run Code Online (Sandbox Code Playgroud)

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

  • 来自 (1):v(t) 将变为零的 t(=> 游戏结束)
  • 来自 (2):所得距离

通过反转计算,您可以计算以位置 's' 结束所需的初始速度