1. 程式人生 > >安卓View滑動之利用動畫實現彈性滑動

安卓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、而後給mImage1設定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還是得我們自己來