android listview fling动画太快了
我有一个自定义的ListView,它逐页显示项目。所以我写了OnTouch方法,它工作得非常完美,现在我想写OnFling方法,它将实现我的ListView的平滑和惯性滚动 问题是smoothScrollToPositionint位置的滚动动画不平滑,速度非常快。smoothScrollToPositionint位置、int偏移量、int持续时间有效,但my minSdk必须为8,除此之外,该函数将当前元素放置在偏移量上 这是我的OnFling方法的代码:android listview fling动画太快了,android,listview,animation,android-listview,onfling,Android,Listview,Animation,Android Listview,Onfling,我有一个自定义的ListView,它逐页显示项目。所以我写了OnTouch方法,它工作得非常完美,现在我想写OnFling方法,它将实现我的ListView的平滑和惯性滚动 问题是smoothScrollToPositionint位置的滚动动画不平滑,速度非常快。smoothScrollToPositionint位置、int偏移量、int持续时间有效,但my minSdk必须为8,除此之外,该函数将当前元素放置在偏移量上 这是我的OnFling方法的代码: @Override public bo
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY)
{
if(null == getAdapter()) return false;
boolean returnValue = false;
float pty1 = 0, pty2 = 0;
if (e1 == null || e2 == null)
return false;
pty1 = e1.getY();
pty2 = e2.getY();
if (pty1 - pty2 > swipeMinDistance && Math.abs(velocityY) > swipeThresholdVelocity)
{
float currentVelocity = Math.min(Math.abs(velocityY), Math.abs(swipeMaxVelocity));
final int shift = (int) ((currentVelocity / swipeMaxVelocity) * swipeMaxElements + 1);
if (activeItem < getAdapter().getCount() - shift - 1)
activeItem = activeItem + shift;
else
{
activeItem = getAdapter().getCount() - 1;
return false;
}
returnValue = true;
}
else if (pty2 - pty1 > swipeMinDistance && Math.abs(velocityY) > swipeThresholdVelocity)
{
float currentVelocity = Math.min(Math.abs(velocityY), Math.abs(swipeMaxVelocity));
final int shift = (int) ((currentVelocity / swipeMaxVelocity) * swipeMaxElements + 1);
if (activeItem >= shift)
activeItem = activeItem - shift;
else
{
activeItem = 0;
return false;
}
returnValue = true;
}
smoothScrollToPosition(activeItem);
return returnValue;
}
xml内容是:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/rl_main"
android:layout_width="match_parent"
android:layout_height="match_parent">
<konteh.example.errortest.CardsListView
android:id="@+id/cardsListView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:smoothScrollbar="true"
/>
解决了!我的解决办法是:
int pixelCount = height * shift * (isForward ? 1 : -1); // calculate approximately shift in pixels
smoothScrollBy(pixelCount, 2 * DURATION * shift);//this smooth scroll works!
postDelayed(new Runnable()
{
public void run()
{
smoothScrollBy(0, 0); // Stops the listview from overshooting.
smoothScrollToPosition(activeItem + 1);
}
},
DURATION * shift);
也许这不是最好的解决方案,但它确实有效