天天看點

android第三方手勢,Android手勢識别02——旋轉、移動等使用第三方庫

Android手勢識别02——旋轉、移動等使用第三方庫

一、簡要說明

通過前面一篇文章(Android手勢識别01——基本手勢的處理)的學習,我們知道了基本手勢的使用方法。但是我們發現這裡基本上手勢的使用方法中,竟然沒有旋轉這種手勢,是不是很不可思議呢?當然你也可以自己來寫這種手勢,其實有現成的手勢庫可以用了哦? 那麼我們就來用用這個庫

我們可以看看這個庫的說明:

1.1 Containments

RotateGestureDetector

Helps finding out the rotation angle between the line of two fingers (with the

normal or previous finger positions)

MoveGestureDetector

Convenience gesture detector to keep it easy moving an object around with one

ore more fingers without losing the clean usage of the gesture detector pattern.

ShoveGestureDetector

Detects a vertical two-finger shove. (If you place two fingers on screen with less than a 20 degree angle between them,

this will detact movement on the Y-axis.)

ScaleGestureDetector (default Android)

This one is NOT in this framework, but is gesture detector that resides in the

Android API since API level 8 (2.2).

BaseGestureDetector (abstract)

Abstract class that every new gesture detector class should extend.

TwoFingerGestureDetector (abstract)

Abstract class that extends the BaseGestureDetector and that every new gesture

detector class for two finger operations should extend.

1.2 庫的使用方式簡要說明

這個庫的使用方式和 Android原生庫的使用方式一模一樣。

1.建立監聽的執行個體

2.建立手勢探測器

3.重寫onTouchEvent方法,這個這個方法内調用探測器的onTouchEvent()

二、RotateGestureDetector的使用

2.1 RotateGestureDetector和RotateGestureDetector.SimpleOnRotateGestureListener的簡要說明

RotateGestureDetector 用處建立旋轉手勢的探測器。其中 getRotationDegreesDelta() 使用者擷取旋轉的角度(機關:角度),值為一個相對值,相對與上一次旋轉的角度值,即以上一次為起點。

RotateGestureDetector.SimpleOnRotateGestureListener 用于建立堂測器的監聽。有三個事件

public boolean onRotate(RotateGestureDetector detector) {

return false;

}

public boolean onRotateBegin(RotateGestureDetector detector) {

return true;

}

public void onRotateEnd(RotateGestureDetector detector) {

// Do nothing, overridden implementation may be used

}

旋轉開始:調用onRotateBegin,旋轉過程中不停的調用onRotate,結束調用onRotateEnd

2.2 RotateGestureActivity.java

public class RotateGestureActivity extends BaseActivity {

private View mView;

private RotateGestureDetector mRotateGestureDetector;

private float mRotationDegrees = 0.f;

private static final String TAG = "RotateGestureActivity";

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_rotate_gesture);

mView = findViewById(R.id.rotate_view);

mRotateGestureDetector = new RotateGestureDetector(this,mSimpleOnRotateGestureListener);

}

@Override

public boolean onTouchEvent(MotionEvent event) {

mRotateGestureDetector.onTouchEvent(event);

return super.onTouchEvent(event);

}

private RotateGestureDetector.SimpleOnRotateGestureListener mSimpleOnRotateGestureListener = new RotateGestureDetector.SimpleOnRotateGestureListener(){

@Override

public boolean onRotate(RotateGestureDetector detector) {

mRotationDegrees = -detector.getRotationDegreesDelta()+mRotationDegrees;

mRotationDegrees = mRotationDegrees % 360;

mView.setRotation(mRotationDegrees);

Log.i(TAG, "onRotate: "+detector.getRotationDegreesDelta()+"----"+mRotationDegrees);

return true;

}

};

}

2.3 旋轉圖示

android第三方手勢,Android手勢識别02——旋轉、移動等使用第三方庫

三、MoveGestureDetector的使用

3.1 MoveGestureDetector和MoveGestureDetector.SimpleOnMoveGestureListener的簡要說明

MoveGestureDetector 移動的探測器。其中getFocusDelta()擷取移動的值,這個值是相對于按下的按個點。

MoveGestureDetector.SimpleOnMoveGestureListener 移動的監聽。

3.2 MoveGestureActivity.java

MoveGestureActivity

public class MoveGestureActivity extends BaseActivity {

private View mView;

private MoveGestureDetector mMoveGestureDetector;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_move_gesture);

mView = findViewById(R.id.move_view);

mMoveGestureDetector = new MoveGestureDetector(this,mSimpleOnMoveGestureListener);

}

@Override

public boolean onTouchEvent(MotionEvent event) {

mMoveGestureDetector.onTouchEvent(event);

return super.onTouchEvent(event);

}

private float mOffsetX = 0;

private float mOffsetY = 0;

private float mLastX = 0;

private float mLastY = 0;

private MoveGestureDetector.SimpleOnMoveGestureListener mSimpleOnMoveGestureListener = new MoveGestureDetector.SimpleOnMoveGestureListener(){

@Override

public boolean onMove(MoveGestureDetector detector) {

mOffsetX = detector.getFocusDelta().x+mLastX;

mOffsetY = detector.getFocusDelta().y+mLastY;

mView.setTranslationX(mOffsetX);

mView.setTranslationY(mOffsetY);

return super.onMove(detector);

}

@Override

public void onMoveEnd(MoveGestureDetector detector) {

mLastX = mOffsetX;

mLastY = mOffsetY;

super.onMoveEnd(detector);

}

};

}

3.3 移動圖示

android第三方手勢,Android手勢識别02——旋轉、移動等使用第三方庫

四、源碼