1. 程式人生 > >Android 手勢識別—縮放

Android 手勢識別—縮放

含義 -- sdn ret 面具 lap sea protect not

上一篇講解了手勢識別中的點擊和雙擊事件的識別,用到的是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 MotionEvents. The ScaleGestureDetector.OnScaleGestureListener callback will notify users when a particular gesture event has occurred. This class should only be used with MotionEvents 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)

由構造方法可知需要為一個縮放類設置一個縮放的監聽接口,具體實現見代碼中監聽類接口的實現,下面具體介紹幾個函數的含義:

  1. 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 手勢識別—縮放