【问题标题】:How to animate scroll position? How to scroll smoothly?如何动画滚动位置?如何平滑滚动?
【发布时间】:2012-05-16 15:10:18
【问题描述】:

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

【问题讨论】:

    标签: android animation scroll drawing


    【解决方案1】:

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

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

    【讨论】:

    • 我应该使用ScrollView吗?我现在使用MyClass extends View
    • 我认为这取决于你在做什么,如果 ScrollView 适合你,那么一定要使用它。
    • 我尝试过扩展ScrollView,但发现onScrollChanged() 在这种情况下没有调用。我需要调用此方法,因为我在其中计算了一些参数。 IE。 smoothScroll 不适合我。
    • 我假设你已经继承了 ScrollView 并覆盖了 onScrollChanged?
    • 这也适用于RecyclerViewsmoothScrollToPosition()
    【解决方案2】:

    使用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();
    }
    

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      • 那是解释如何从头开始实现一个 ScrollView!这不是答案
      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-02-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-09-23
        相关资源
        最近更新 更多