【发布时间】:2011-07-08 19:09:26
【问题描述】:
我有一种情况,我正在使用带有图像的水平滚动视图并使用按钮平滑滚动到不同的图像位置。现在它工作正常我只是想知道是否有人知道减慢平滑滚动方法,即有更长的动画时间?目前,捕捉发生得非常快。
也许通过覆盖平滑滚动,我试图搜索这个/示例但没有运气。
有什么想法吗?
谢谢,
硅
【问题讨论】:
标签: android horizontalscrollview smooth-scrolling
我有一种情况,我正在使用带有图像的水平滚动视图并使用按钮平滑滚动到不同的图像位置。现在它工作正常我只是想知道是否有人知道减慢平滑滚动方法,即有更长的动画时间?目前,捕捉发生得非常快。
也许通过覆盖平滑滚动,我试图搜索这个/示例但没有运气。
有什么想法吗?
谢谢,
硅
【问题讨论】:
标签: android horizontalscrollview smooth-scrolling
怎么样:
ObjectAnimator animator=ObjectAnimator.ofInt(yourHorizontalScrollView, "scrollX",targetXScroll );
animator.setDuration(800);
animator.start();
【讨论】:
smoothScrollTo)。
这是一种方法,对我来说效果很好:
new CountDownTimer(2000, 20) {
public void onTick(long millisUntilFinished) {
hv.scrollTo((int) (2000 - millisUntilFinished), 0);
}
public void onFinish() {
}
}.start();
所以这里水平滚动视图 (hv) 会在两秒内从位置 0 移动到 2000,如果小于 2000 像素,则移动到视图的末尾。易于调整...
【讨论】:
HorizontalScrollView 的子类,使用反射来访问HorizontalScrollView 中的私有字段mScroller。当然,如果底层类更改了字段名称,这将中断,它默认恢复为原始滚动实现。
调用myScroller.startScroll(scrollX, getScrollY(), dx, 0, 500); 改变滚动速度。
private OverScroller myScroller;
private void init()
{
try
{
Class parent = this.getClass();
do
{
parent = parent.getSuperclass();
} while (!parent.getName().equals("android.widget.HorizontalScrollView"));
Log.i("Scroller", "class: " + parent.getName());
Field field = parent.getDeclaredField("mScroller");
field.setAccessible(true);
myScroller = (OverScroller) field.get(this);
} catch (NoSuchFieldException e)
{
e.printStackTrace();
} catch (IllegalArgumentException e)
{
e.printStackTrace();
} catch (IllegalAccessException e)
{
e.printStackTrace();
}
}
public void customSmoothScrollBy(int dx, int dy)
{
if (myScroller == null)
{
smoothScrollBy(dx, dy);
return;
}
if (getChildCount() == 0)
return;
final int width = getWidth() - getPaddingRight() - getPaddingLeft();
final int right = getChildAt(0).getWidth();
final int maxX = Math.max(0, right - width);
final int scrollX = getScrollX();
dx = Math.max(0, Math.min(scrollX + dx, maxX)) - scrollX;
myScroller.startScroll(scrollX, getScrollY(), dx, 0, 500);
invalidate();
}
public void customSmoothScrollTo(int x, int y)
{
customSmoothScrollBy(x - getScrollX(), y - getScrollY());
}
【讨论】:
OverScroller 是 API 9,而不是 Scroller 的子类。
customSmoothScrollBy 中的一些值
它是一个自动连续滚动的滚动条。它通过连续滚动图像列表来显示信用屏幕。这可能会对您有所帮助或给您一些想法。
【讨论】:
请改用.smoothScrollToPositionFromTop。示例
listView.smoothScrollToPositionFromTop(scroll.pos(),0,scroll.delay());
wherescroll 是一个简单的变量,来自一个类,它获取当前屏幕位置.get() 返回新位置.pos() 和平滑滚动时间.delay ...等
【讨论】:
【讨论】:
看看http://developer.android.com/reference/android/widget/Scroller.html:
滚动的持续时间可以在构造函数中传递,并指定滚动动画应该花费的最长时间
【讨论】: