GestureDetector学习之左右滑动,上下滑动屏幕切换页面
要實現(xiàn)滑屏等觸發(fā)事件,視情況而定;
如果實現(xiàn)的觸屏或者手勢效果較多,則使用第一種方法,實現(xiàn)OnGestureListener 接口(參考OnGestureListener);
如果只是實現(xiàn)較少的效果,則考慮使用SimpleOnGestureListener(參考SimpleOnGestureListenter);主要分為以下三步:
第一種方法:
1、繼承OnTouchListener , OnGestureListener ;
//繼承OnTouchListener,OnGestureListener public class MainActivity extends Activity implements OnTouchListener,OnGestureListener{?
注:此處使用的OnGestureListener來自包 android.view.GestureDetector.OnGestureListener;而不是 android.gesture.GestureOverlayView.OnGestureListener;
2、初始化OnGestureListener ,即注冊手勢監(jiān)聽 ;獲得當前接受操作的布局id ; 注冊觸屏監(jiān)聽;
//手勢監(jiān)聽 mGestureDetector = new GestureDetector(MainActivity.this,(OnGestureListener) this);//(OnGestureListener) 可以省略 //獲得當前接受操作的布局id RelativeLayout mActivity = (RelativeLayout)findViewById(R.id.main_activity); //觸屏監(jiān)聽 mActivity.setOnTouchListener(this); mActivity.setLongClickable(true);?
3、重載onFling()和onTouch();
public boolean onTouch(View v, MotionEvent event) {return mGestureDetector.onTouchEvent(event); }public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {//省略 }
第二種方法如下:
1、繼承OnTouchListener? ;
//繼承OnTouchListener public class MainActivity extends Activity implements OnTouchListener{?
2、初始化OnGestureListener ,即注冊手勢監(jiān)聽 ;獲得當前接受操作的布局id ; 注冊觸屏監(jiān)聽;
//手勢監(jiān)聽 mGestureDetector = new GestureDetector(MainActivity.this,new MySimpleOnGestureListener());//下邊定義MySimpleOnGestureListener,//并使其繼承SimpleOnGestureListener類 //獲得當前接受操作的布局id RelativeLayout mActivity = (RelativeLayout)findViewById(R.id.main_activity); //觸屏監(jiān)聽 mActivity.setOnTouchListener(this); mActivity.setLongClickable(true);3、定義SimpleOnGestureListener子類,并重載onTouch()和所需方法;
class MySimpleGestureListener extends SimpleOnGestureListener{@Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {//大于設(shè)定的最小滑動距離并且在水平/豎直方向速度絕對值大于設(shè)定的最小速度,則執(zhí)行相應方法if(e1.getX()-e2.getX() > verticalMinistance && Math.abs(velocityX) > minVelocity){Toast.makeText(MainActivity.this, "turn left", Toast.LENGTH_SHORT).show();}else if(e2.getX() - e1.getX() > verticalMinistance && Math.abs(velocityX) > minVelocity){Toast.makeText(MainActivity.this, "turn right", Toast.LENGTH_SHORT).show();}else if(e1.getY()-e2.getY() > 20 && Math.abs(velocityY) > 10){Toast.makeText(MainActivity.this, "turn up", Toast.LENGTH_SHORT).show();}else if(e2.getY()-e1.getY() > 20 && Math.abs(velocityY) > 10){Toast.makeText(MainActivity.this, "turn down", Toast.LENGTH_SHORT).show();}return false;}@Overridepublic boolean onDown(MotionEvent e){Toast.makeText(MainActivity.this, "onDown", Toast.LENGTH_SHORT).show();return false;}}?
具體代碼如下:
(第一種方法)
import android.app.Activity; import android.content.Intent;import android.os.Bundle; import android.util.Log; import android.view.GestureDetector; import android.view.GestureDetector.OnGestureListener; import android.view.GestureDetector.SimpleOnGestureListener; import android.view.Menu; import android.view.MotionEvent; import android.view.View; import android.view.View.OnTouchListener; import android.widget.*;public class MainActivity extends Activity implements OnTouchListener,OnGestureListener{private static final String tag = "mainActivity";private GestureDetector mGestureDetector;private int verticalMinistance = 20; //水平最小識別距離private int minVelocity = 10; //最小識別速度@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//手勢監(jiān)聽mGestureDetector = new GestureDetector(MainActivity.this,(OnGestureListener) this);//(OnGestureListener) 可以省略//獲得當前接受操作的布局idRelativeLayout mActivity = (RelativeLayout)findViewById(R.id.main_activity);//觸屏監(jiān)聽mActivity.setOnTouchListener(this);mActivity.setLongClickable(true);}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}@Overridepublic boolean onTouch(View v, MotionEvent event) {return mGestureDetector.onTouchEvent(event);}public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {//大于設(shè)定的最小滑動距離并且在水平/豎直方向速度絕對值大于設(shè)定的最小速度,則執(zhí)行相應方法if(e1.getX()-e2.getX() > verticalMinistance && Math.abs(velocityX) > minVelocity){//在此處實現(xiàn)跳轉(zhuǎn)//Intent intent = new Intent(MainActivity.this,nextActivity.class);//startActivity(intent);Toast.makeText(MainActivity.this, "turn left", Toast.LENGTH_SHORT).show();}else if(e2.getX() - e1.getX() > verticalMinistance && Math.abs(velocityX) > minVelocity){Toast.makeText(MainActivity.this, "turn right", Toast.LENGTH_SHORT).show();}else if(e1.getY()-e2.getY() > 20 && Math.abs(velocityY) > 10){Toast.makeText(MainActivity.this, "turn up", Toast.LENGTH_SHORT).show();}else if(e2.getY()-e1.getY() > 20 && Math.abs(velocityY) > 10){Toast.makeText(MainActivity.this, "turn down", Toast.LENGTH_SHORT).show();}return false;}//只要有觸發(fā)就會調(diào)用次方法@Overridepublic boolean onDown(MotionEvent e) {Toast.makeText(MainActivity.this, "onDown", Toast.LENGTH_SHORT).show();return false;}@Overridepublic void onLongPress(MotionEvent e) {Toast.makeText(MainActivity.this, "onLongPress", Toast.LENGTH_SHORT).show();}@Overridepublic boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {// Toast.makeText(MainActivity.this, "onScroll", Toast.LENGTH_SHORT).show();return false;}@Overridepublic void onShowPress(MotionEvent e) { // Toast.makeText(MainActivity.this, "onShowPress", Toast.LENGTH_SHORT).show();}@Overridepublic boolean onSingleTapUp(MotionEvent e) { // Toast.makeText(MainActivity.this, "onsingleTapup", Toast.LENGTH_SHORT).show();return false;} }?
?
(第二種方法)
import android.app.Activity; import android.content.Intent;import android.os.Bundle; import android.util.Log; import android.view.GestureDetector; import android.view.GestureDetector.OnGestureListener; import android.view.GestureDetector.SimpleOnGestureListener; import android.view.Menu; import android.view.MotionEvent; import android.view.View; import android.view.View.OnTouchListener; import android.widget.*;public class MainActivity extends Activity implements OnTouchListener{private static final String tag = "mainActivity";private GestureDetector mGestureDetector;private int verticalMinistance = 20; //水平最小識別距離private int minVelocity = 10; //最小識別速度@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//手勢監(jiān)聽mGestureDetector = new GestureDetector(MainActivity.this,new LearnGestureListener());//獲得當前接受操作的布局idRelativeLayout mActivity = (RelativeLayout)findViewById(R.id.main_activity);//觸屏監(jiān)聽mActivity.setOnTouchListener(this);mActivity.setLongClickable(true);}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}@Overridepublic boolean onTouch(View v, MotionEvent event) {return mGestureDetector.onTouchEvent(event);}class LearnGestureListener extends SimpleOnGestureListener{@Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {//大于設(shè)定的最小滑動距離并且在水平/豎直方向速度絕對值大于設(shè)定的最小速度,則執(zhí)行相應方法if(e1.getX()-e2.getX() > verticalMinistance && Math.abs(velocityX) > minVelocity){Toast.makeText(MainActivity.this, "turn left", Toast.LENGTH_SHORT).show();}else if(e2.getX() - e1.getX() > verticalMinistance && Math.abs(velocityX) > minVelocity){Toast.makeText(MainActivity.this, "turn right", Toast.LENGTH_SHORT).show();}else if(e1.getY()-e2.getY() > 20 && Math.abs(velocityY) > 10){Toast.makeText(MainActivity.this, "turn up", Toast.LENGTH_SHORT).show();}else if(e2.getY()-e1.getY() > 20 && Math.abs(velocityY) > 10){Toast.makeText(MainActivity.this, "turn down", Toast.LENGTH_SHORT).show();}return false;}@Overridepublic boolean onDown(MotionEvent e){Toast.makeText(MainActivity.this, "onDown", Toast.LENGTH_SHORT).show();return false;}}}轉(zhuǎn)載于:https://www.cnblogs.com/jiangu66/p/3202732.html
總結(jié)
以上是生活随笔為你收集整理的GestureDetector学习之左右滑动,上下滑动屏幕切换页面的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Mini 容器学习笔记6——组件的获取(
- 下一篇: 记录ubuntu18.04安装QQ过程