亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

詳談OnTouchListener與OnGestureListener的區別

發布時間:2020-08-30 08:48:33 來源:腳本之家 閱讀:182 作者:jingxian 欄目:移動開發

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的區別就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

彰武县| 慈溪市| 雅江县| 崇礼县| 盘山县| 洛隆县| 东台市| 托里县| 南召县| 沙河市| 格尔木市| 江达县| 苏尼特右旗| 仪陇县| 平山县| 滨州市| 府谷县| 广平县| 义乌市| 铜川市| 黎平县| 革吉县| 阳西县| 沾益县| 延安市| 余庆县| 岳阳县| 青岛市| 长岭县| 明水县| 满城县| 黔东| 佛坪县| 宜城市| 达拉特旗| 甘肃省| 大悟县| 青铜峡市| 荣成市| 万荣县| 岳阳县|