安卓View滑動之利用動畫實現彈性滑動
阿新 • • 發佈:2019-02-14
背景
昨天用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還是得我們自己來