Android 如何设置滚动位置的动画?如何平滑滚动?

Android 如何设置滚动位置的动画?如何平滑滚动?,android,animation,scroll,drawing,Android,Animation,Scroll,Drawing,我希望在自定义视图中平稳地移动到下一个滚动位置(按按钮或事件)。如何实现这一点?首先,我看不到滚动动画类(只有alpha、旋转、缩放和平移)。其次,有了动画类,我看不到迭代类(比如滚动100个像素,不管我们有什么位置),只有绝对类(即从一个常量值到另一个常量值的动画)。假设您使用的是ScrollView,smoothScrollTo(…)对您有效吗 查看示例代码以了解如何进行动画滚动。它可以在2D中工作,缓存复杂的绘图,还可以处理投掷手势,但您可以根据需要简化所有操作。通过组合使用滚动器/过滚动

我希望在自定义视图中平稳地移动到下一个滚动位置(按按钮或事件)。如何实现这一点?首先,我看不到滚动动画类(只有alpha、旋转、缩放和平移)。其次,有了动画类,我看不到迭代类(比如滚动100个像素,不管我们有什么位置),只有绝对类(即从一个常量值到另一个常量值的动画)。

假设您使用的是ScrollView,smoothScrollTo(…)对您有效吗


查看示例代码以了解如何进行动画滚动。它可以在2D中工作,缓存复杂的绘图,还可以处理投掷手势,但您可以根据需要简化所有操作。

通过组合使用滚动器/过滚动器来制作滚动动画(计算滚动偏移的时间插值),手势检测器(启动滚动器对象)以及视图的oncomputerscroll方法(隐式地是动画循环)


官方的android文档现在有一个关于这个主题的详细教程

使用
ObjectAnimator
,这是一个滚动到顶部的示例:

public void scrollToTop() {
    int x = 0;
    int y = 0;

    ObjectAnimator xTranslate = ObjectAnimator.ofInt(mScrollView, "scrollX", x);
    ObjectAnimator yTranslate = ObjectAnimator.ofInt(mScrollView, "scrollY", y);

    AnimatorSet animators = new AnimatorSet();
    animators.setDuration(1000L);
    animators.playTogether(xTranslate, yTranslate);

    animators.addListener(new AnimatorListener() {

        @Override
        public void onAnimationStart(Animator arg0) {
            // TODO Auto-generated method stub
        }

        @Override
        public void onAnimationRepeat(Animator arg0) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onAnimationEnd(Animator arg0) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onAnimationCancel(Animator arg0) {
            // TODO Auto-generated method stub

        }
    });
    animators.start();
}

我应该使用
ScrollView
?我现在使用的是
MyClass extends View
。我认为这取决于你在做什么,如果ScrollView适合你,那么一定要使用它。我尝试过扩展
ScrollView
,但发现在这种情况下没有调用
onScrollChanged()
。我需要调用这个方法,因为我计算了其中的一些参数。也就是说,
smoothScroll
对我不起作用。我假设您已将ScrollView子类化并覆盖onScrollChanged?这也适用于
RecyclerView
,使用
smoothScrollToPosition()