28

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

4

4 回答 4

45

假设您使用的是 ScrollView,smoothScrollTo(...) 是否适合您?

http://developer.android.com/reference/android/widget/ScrollView.html#smoothScrollTo%28int,%20int%29

于 2012-05-16T15:14:50.720 回答
39

使用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();
}
于 2014-02-05T10:03:58.567 回答
1

动画滚动是通过结合使用Scroller/OverScroller(计算滚动偏移的时间插值)、GestureDetectors(启动滚动对象)和 View 的onComputeScroll方法(隐含地是动画循环)来完成的。

官方的 android 文档现在有一个关于这个主题的详细教程。http://developer.android.com/training/gestures/scroll.html

于 2013-07-08T02:21:18.233 回答
0

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

于 2012-05-17T11:37:24.217 回答