Android系統的APP不同于ios的APP,由于Android手機帶有實體傳回鍵,是以在寫Android應用的時候不需要硬搬iPhone的開發經驗去寫一個軟傳回鍵,更多的是去使用手勢操作,這樣既可以增加使用者體驗,又添加另外一種傳回方式。
基本上都是用OnGestureListener來實作手勢操作,不過如果開發一個程式中大量的使用的類似于左滑傳回的效果時,可以考慮下面這種複用方式:
package com.toobur.app.activity;
import com.toobur.app.tools.R;
import android.app.Activity;
import android.os.Bundle;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.View;
import android.view.GestureDetector.OnGestureListener;
public class GestureDetectorActivity extends Activity{
private GestureDetector gestureDetector = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
gestureDetector = new GestureDetector(this, new GestureListener());
}
@Override
public boolean onTouchEvent(MotionEvent event){
return gestureDetector.onTouchEvent(event);
}
public class GestureListener implements View.OnTouchListener, OnGestureListener{
@Override
public boolean onDown(MotionEvent arg0) {
return false;
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float X,
float Y) {
if(e1.getX() - e2.getX() > 100 && Math.abs(X) > 50){//判斷為左滑
toAction();
}else if(e2.getX() - e1.getX() > 100 && Math.abs(X) > 50){
}
return false;
}
@Override
public void onLongPress(MotionEvent arg0) {
}
@Override
public boolean onScroll(MotionEvent arg0, MotionEvent arg1, float arg2,
float arg3) {
return false;
}
@Override
public void onShowPress(MotionEvent arg0) {
}
@Override
public boolean onSingleTapUp(MotionEvent arg0) {
return false;
}
@Override
public boolean onTouch(View v, MotionEvent event) {
gestureDetector.onTouchEvent(event);
return false;
}
public void toAction(){
finish();
overridePendingTransition(R.anim.slide_in_right, R.anim.slide_out_left);
}
}
}
注:上述代碼中finish()方法後面的Activity切換效果可以參考上一篇部落格中的介紹。
該類的使用方法如下:
package com.toobur.app.function;
import android.os.Bundle;
import com.toobur.app.activity.GestureDetectorActivity;
public class Test extends GestureDetectorActivity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
}
實作自定義手勢類,不需要做任何特殊操作,隻需要一個繼承就可以大功告成。