Android 手勢識別—縮放

來源:互聯網
上載者:User

標籤: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 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 手勢識別—縮放

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.