【问题标题】:Can we control the end position of a fling in a ListView我们可以在 ListView 中控制一个 fling 的结束位置吗
【发布时间】:2011-11-07 13:14:17
【问题描述】:

我有一个简单的 ListView,其中包含一组 TextView。

我总是希望 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);

}


}

【问题讨论】:

  • 您找到解决方案了吗?
  • 是的,请看下面的答案
  • 终于有答案了。伟大的!不幸的是,我不记得为什么我需要那个:-D

标签: android android-listview


【解决方案1】:

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

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

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

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

  • 来自 (1):v(t) 将变为零的 t(=> 抛投结束)
  • 从 (2):得到的距离

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-26
    • 1970-01-01
    • 1970-01-01
    • 2017-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-22
    相关资源
    最近更新 更多