標籤:ase java nts users tag close ali ros pat
上一篇講解了手勢識別中的點擊和雙擊事件的識別,用到的是GestureDetector類和GestureDetectorCompat類,用於監聽使用者觸控螢幕幕中的簡單動作。
縮放
基本用法如下,可以通過縮放手勢縮放一個View
public class ScaleGestureActivity extends BaseActivity { private View mView; private ScaleGestureDetector mScaleGestureDetector; private static final String TAG = "ScaleGestureActivity"; private float mScaleFactor = 1.0f; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_scale_gesture); mView = findViewById(R.id.scale_view); mScaleGestureDetector = new ScaleGestureDetector(this,mScaleGestureListener); } @Override public boolean onTouchEvent(MotionEvent event) { mScaleGestureDetector.onTouchEvent(event); return super.onTouchEvent(event); } private ScaleGestureDetector.OnScaleGestureListener mScaleGestureListener = new ScaleGestureDetector.OnScaleGestureListener() { @Override public boolean onScale(ScaleGestureDetector scaleGestureDetector) { mScaleFactor *= scaleGestureDetector.getScaleFactor(); mView.setScaleX(mScaleFactor); mView.setScaleY(mScaleFactor); Log.i(TAG, "onScale: "+ scaleGestureDetector.getScaleFactor()+"----"+mScaleFactor); return true; } @Override public boolean onScaleBegin(ScaleGestureDetector scaleGestureDetector) { return true; } @Override public void onScaleEnd(ScaleGestureDetector scaleGestureDetector) { } };}
View Code
ScaleGestureDetector 官方對該類的解釋如下:
Detects scaling transformation gestures using the supplied MotionEvent
s. The ScaleGestureDetector.OnScaleGestureListener
callback will notify users when a particular gesture event has occurred. This class should only be used with MotionEvent
s reported via touch. To use this class:
- Create an instance of the
ScaleGestureDetector
for your View
- In the
onTouchEvent(MotionEvent)
method ensure you call onTouchEvent(MotionEvent)
. The methods defined in your callback will be executed when the events occur.
該類的構造方法如下:
public ScaleGestureDetector(Context context, ScaleGestureDetector.OnScaleGestureListener listener)
由構造方法可知需要為一個縮放類設定一個縮放的監聽介面,具體實現見代碼中監聽類介面的實現,下面具體介紹幾個函數的含義:
- public boolean onScale(ScaleGestureDetector detector);
縮放時會被調用,傳回值代表本次縮放事件是否已被處理。如果已被處理,那麼detector就會重設縮放事件;如果未被處理,detector會繼續進行計算,修改getScaleFactor()的傳回值,直到被處理為止。因此,它常用在判斷只有縮放值達到一定數值時才進行縮放。下面的代碼錶示只有當縮放倍數達到2倍時才對其進行縮放,否則該事件不處理。
public boolean onScale(ScaleGestureDetector detector) {System.out.println(detector.getScaleFactor());if(detector.getScaleFactor()< 2){return false;}mMatrix.preScale(detector.getScaleFactor(), detector.getScaleFactor());setImageMatrix(mMatrix);return true;}
2.public boolean onScaleBegin(ScaleGestureDetector detector)
縮放開始時會被調用。傳回值表示該detector是否處理後繼的縮放事件。返回false時,不會執行後續的onScale()。
3. public void onScaleEnd(ScaleGestureDetector scaleGestureDetector)
縮放結束時的回調
http://blog.csdn.net/qiwenmingshiwo/article/details/70850406
https://github.com/Almeros/android-gesture-detectors
https://github.com/Almeros/android-gesture-detectors-example/blob/master/app/src/main/java/com/almeros/android/multitouch/example/TouchActivity.java
Android 手勢識別—縮放