国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

詳談OnTouchListener與OnGestureListener的區別

2019-12-12 03:07:37
字體:
來源:轉載
供稿:網友

Android事件處理機制是基于Listener實現的,比如觸摸屏相關的事件,是通過OnTouchListener實現的;而手勢是通過OnGestureListener實現的,那么這兩者有什么關聯呢?

OnTouchListener

OnTouchListener接口中包含一個onTouch()方法,直接看一個例子:

public class MainActivity extends Activity implements OnTouchListener {	public void onCreate(Bundle outState) {  	super.onCreate(outState);  	setContentView(R.layout.main);  	TextView tv = (TextView) findViewById(R.id.tv);  	tv.setOnTouchListener(this);  }  public boolean onTouch(View v, MotionEvent event) {  	Toast.makeText(this, "Touch Touch", Toast.LENGTH_SHORT).show();		return false ;   }}

我們可以通過MotionEvent的getAction()方法來獲取Touch事件的類型,包括 ACTION_DOWN(按下觸摸屏), ACTION_MOVE(按下觸摸屏后移動受力點), ACTION_UP(松開觸摸屏)和ACTION_CANCEL(不會由用戶直接觸發)。借助對于用戶不同操作的判斷,結合getRawX()、 getRawY()、getX()和getY()等方法來獲取坐標后,我們可以實現諸如拖動某一個按鈕,拖動滾動條等功能。

可以看到OnTouchListener只能監聽到三種觸摸事件,即按下,移動,松開,如果想要監聽到雙擊、滑動、長按等復雜的手勢操作,這個時候就必須得用到OnGestureListener了。

OnGestureListener

接著上面的例子,這次加入手勢監聽:

public class MainActivity extends Activity implements OnTouchListener, OnGestureListener {	private GestureDetector mGestureDetector; 	public void onCreate(Bundle outState) {  	super.onCreate(outState);  	setContentView(R.layout.main);  	mGestureDetector = new GestureDetector(this);  	TextView tv = (TextView) findViewById(R.id.tv);  	tv.setOnTouchListener(this);  }  public boolean onTouch(View v, MotionEvent event) {  	return mGestureDetector.onTouchEvent(event);  }  // 用戶輕觸觸摸屏,由1個MotionEvent ACTION_DOWN觸發   public boolean onDown(MotionEvent arg0) {		Log.i("MyGesture", "onDown");		Toast.makeText(this, "onDown", Toast.LENGTH_SHORT).show();   		return true;	}	// 用戶輕觸觸摸屏,尚未松開或拖動,由一個1個MotionEvent ACTION_DOWN觸發, 注意和onDown()的區別,強調的是沒有松開或者拖動的狀態	public void onShowPress(MotionEvent e) {		Log.i("MyGesture", "onShowPress");      		Toast.makeText(this, "onShowPress", Toast.LENGTH_SHORT).show();	}	// 用戶(輕觸觸摸屏后)松開,由一個1個MotionEvent ACTION_UP觸發	public  boolean onSingleTapUp(MotionEvent e) {		Log.i("MyGesture", "onSingleTapUp");		Toast.makeText(this, "onSingleTapUp", Toast.LENGTH_SHORT).show();		return true;	}	// 用戶按下觸摸屏、快速移動后松開,由1個MotionEvent ACTION_DOWN, 多個ACTION_MOVE, 1個ACTION_UP觸發    	public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {  		Log.i("MyGesture", "onFling");		Toast.makeText(this, "onFling", Toast.LENGTH_LONG).show();   		return true;	} 	// 用戶按下觸摸屏,并拖動,由1個MotionEvent ACTION_DOWN, 多個ACTION_MOVE觸發	public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {      		Log.i("MyGesture", "onScroll"); 		Toast.makeText(this, "onScroll", Toast.LENGTH_LONG).show();		return true; 	} 	// 用戶長按觸摸屏,由多個MotionEvent ACTION_DOWN觸發	public  void onLongPress(MotionEvent e) {		Log.i("MyGesture", "onLongPress");		Toast.makeText(this, "onLongPress", Toast.LENGTH_LONG).show(); 	}}

以上這篇詳談OnTouchListener與OnGestureListener的區別就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 德阳市| 锦屏县| 潢川县| 龙州县| 安仁县| 元谋县| 郧西县| 莱阳市| 永德县| 宁明县| 始兴县| 鹰潭市| 武清区| 海原县| 仁化县| 馆陶县| 洪湖市| 威信县| 泰来县| 罗江县| 大荔县| 桃园县| 宿州市| 内江市| 双桥区| 惠水县| 阿图什市| 合江县| 新丰县| 武陟县| 浮梁县| 石河子市| 临西县| 会泽县| 滨海县| 千阳县| 富裕县| 墨脱县| 桃园县| 永仁县| 商水县|