Android自訂View滑動事件處理總結

來源:互聯網
上載者:User

標籤:

 

滑動處理需要用到的各種工具類:


android.view.VelocityTracker

android.view.OverScroller

android.view.ViewConfiguration

 

VelocityTracker類 

 

主要用跟蹤觸控螢幕事件(flinging事件和其他gestures手勢事件)的速率。

用addMovement(MotionEvent)函數將Motion event加入到VelocityTracker類執行個體中。你可以使用getXVelocity() 或getXVelocity()獲得橫向和豎向的速率,但是使用它們之前請先調用computeCurrentVelocity(int units)來初始化速率的單位 。

 

computeCurrentVelocity(int units, float maxVelocity)

unitis表示速率的基本時間單位。unitis值為1的表示是,一毫秒時間單位內運動了多少個像素, unitis值為1000表示一秒(1000毫秒)時間單位內運動了多少個像素maxVelocity表示速率的最大值  
 1 @Override 2     public boolean onTouchEvent(MotionEvent event) { 3         // 獲得允許執行一個fling手勢動作的最大速度值 4         int mMaximumVelocity = ViewConfiguration.get(context) 5                 .getScaledMaximumFlingVelocity(); 6  7         // 執行個體化 8         VelocityTracker mVelocityTracker = VelocityTracker.obtain(); 9         mVelocityTracker.addMovement(event);10         int action = event.getAction();11         float y = event.getY();12 13         switch (action) {14         case MotionEvent.ACTION_DOWN:15 16             return true;17         case MotionEvent.ACTION_MOVE:18 19             break;20         case MotionEvent.ACTION_CANCEL:21             // 回收22             mVelocityTracker.recycle();23 24             break;25         case MotionEvent.ACTION_UP:26             // 初始化速率的單位27             mVelocityTracker.computeCurrentVelocity(1000, mMaximumVelocity);28             int velocityY = (int) mVelocityTracker.getYVelocity();29 30             // 回收31             mVelocityTracker.recycle();32 33             break;34         }35 36         return super.onTouchEvent(event);37     }

 

OverScroller類

 

是為了實現View平滑滾動的一個Helper類。它的作用就是輔助記錄和計算我們滑動的距離和速度這些,用於自訂移動時幫我們處理掉數學的計算部分。

1 OverScroller mScroller = new OverScroller(context);2 //滾動,startX, startY為開始滾動的位置,dx,dy為滾動的位移量, duration為完成滾動的時間3 mScroller.startScroll(int startX, int startY, int dx, int dy) 4 //使用預設完成時間250ms5 mScroller.startScroll(int startX, int startY, int dx, int dy, int duration)6 //傳回值為boolean,true說明滾動尚未完成,false說明滾動已經完成。7 mScroller.computeScrollOffset()

 

設定mScroller滾動的位置時,並不會導致View的滾動,通常是用mScroller記錄/計算View滾動的位置,再重寫View的computeScroll(),完成實際的滾動。

 

 

ViewConfiguration類

 

這個類主要定義了UI中所使用到的標準常量,像逾時、尺寸、距離,如果我們需要得到這些常量的資料,我們就可以通過這個類來擷取

1  //獲得觸發移動事件的最短距離,如果小於這個距離就不觸發行動控制項2 int mTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop();3 //獲得允許執行一個fling手勢動作的最大速度值4 int mMaximumVelocity = ViewConfiguration.get(context).getScaledMaximumFlingVelocity();5 //獲得允許執行一個fling手勢動作的最小速度值6 int mMinimumVelocity = ViewConfiguration.get(context).getScaledMinimumFlingVelocity();

 

 

如果布局控制項以及其子控制項的尺寸進行精確的控制那就要重寫下面這個方法了

onMeasure(int widthMeasureSpec, int heightMeasureSpec)

 

 

Android自訂View滑動事件處理總結

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.