安卓View滑动之利用动画实现弹性滑动

背景

昨天用Scroller实现了下弹性滑动,而利用动画,也可以实现类似的效果


步骤

1、创建ValueAnimator,添加updateListener

主要的scroll逻辑是放在updateListener里的,代码如下

        final ValueAnimator animator = ValueAnimator.ofInt(0, 1).setDuration(250); // ofInt()里的值一般用来表示动画的起止区间,setDuration()里面的单位是毫秒
        animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
            @Override
            public void onAnimationUpdate(ValueAnimator animation) {
                int offsetY, destY;
                if (mIsDown) { // 如果是按下
                    offsetY = mImage1.getScrollY() - 0;
                    destY = 40;
                } else { // 如果是抬起
                    offsetY = mImage1.getScrollY() - 40;
                    destY = -40;
                }
                mImage1.scrollBy(0, destY - offsetY); // 这里scrollBy()就行,滚动一定的偏移量
                mImage1.invalidate(); // 重绘
            }
        });

2、而后给view设定onTouchListener

规定按下往上跳,抬起归位,代码如下

        mImage1.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {

                switch (event.getAction()) {
                    case MotionEvent.ACTION_DOWN:
                        if (!animator.isStarted() && !animator.isRunning()) {
                            mIsDown = true;
                        }
                        break;
                    case MotionEvent.ACTION_UP:
                        if (animator.isStarted() || animator.isRunning()) {
                            mIsDown = false;
                        }
                        break;
                }

                if (!animator.isStarted() && !animator.isRunning()) { // 要是按的时间长了,可能需要重启动画
                    animator.start();
                }

                return true;
            }
        });


效果


结语

ValueAnimator动画并没有想象地那么复杂,充其量只是一个带有计时功能的控制器罢了,处理view还是得我们自己来

猜你喜欢

转载自blog.csdn.net/qq_37475168/article/details/80676320