最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳談OnTouchListener與OnGestureListener的區(qū)別

 更新時(shí)間:2017年04月11日 11:02:43   投稿:jingxian  
下面小編就為大家?guī)?lái)一篇詳談OnTouchListener與OnGestureListener的區(qū)別。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

Android事件處理機(jī)制是基于Listener實(shí)現(xiàn)的,比如觸摸屏相關(guān)的事件,是通過(guò)OnTouchListener實(shí)現(xiàn)的;而手勢(shì)是通過(guò)OnGestureListener實(shí)現(xiàn)的,那么這兩者有什么關(guān)聯(lián)呢?

OnTouchListener

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

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 ; 
  }
}

我們可以通過(guò)MotionEvent的getAction()方法來(lái)獲取Touch事件的類型,包括 ACTION_DOWN(按下觸摸屏), ACTION_MOVE(按下觸摸屏后移動(dòng)受力點(diǎn)), ACTION_UP(松開觸摸屏)和ACTION_CANCEL(不會(huì)由用戶直接觸發(fā))。借助對(duì)于用戶不同操作的判斷,結(jié)合getRawX()、 getRawY()、getX()和getY()等方法來(lái)獲取坐標(biāo)后,我們可以實(shí)現(xiàn)諸如拖動(dòng)某一個(gè)按鈕,拖動(dòng)滾動(dòng)條等功能。

可以看到OnTouchListener只能監(jiān)聽到三種觸摸事件,即按下,移動(dòng),松開,如果想要監(jiān)聽到雙擊、滑動(dòng)、長(zhǎng)按等復(fù)雜的手勢(shì)操作,這個(gè)時(shí)候就必須得用到OnGestureListener了。

OnGestureListener

接著上面的例子,這次加入手勢(shì)監(jiān)聽:

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個(gè)MotionEvent ACTION_DOWN觸發(fā) 
  public boolean onDown(MotionEvent arg0) {
		Log.i("MyGesture", "onDown");
		Toast.makeText(this, "onDown", Toast.LENGTH_SHORT).show();   
		return true;
	}

	// 用戶輕觸觸摸屏,尚未松開或拖動(dòng),由一個(gè)1個(gè)MotionEvent ACTION_DOWN觸發(fā), 注意和onDown()的區(qū)別,強(qiáng)調(diào)的是沒有松開或者拖動(dòng)的狀態(tài)
	public void onShowPress(MotionEvent e) {
		Log.i("MyGesture", "onShowPress");      
		Toast.makeText(this, "onShowPress", Toast.LENGTH_SHORT).show();
	}

	// 用戶(輕觸觸摸屏后)松開,由一個(gè)1個(gè)MotionEvent ACTION_UP觸發(fā)

	public  boolean onSingleTapUp(MotionEvent e) {
		Log.i("MyGesture", "onSingleTapUp");
		Toast.makeText(this, "onSingleTapUp", Toast.LENGTH_SHORT).show();
		return true;
	}

	// 用戶按下觸摸屏、快速移動(dòng)后松開,由1個(gè)MotionEvent ACTION_DOWN, 多個(gè)ACTION_MOVE, 1個(gè)ACTION_UP觸發(fā)    

	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;
	}

 	// 用戶按下觸摸屏,并拖動(dòng),由1個(gè)MotionEvent ACTION_DOWN, 多個(gè)ACTION_MOVE觸發(fā)

	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;
 	}

 	// 用戶長(zhǎng)按觸摸屏,由多個(gè)MotionEvent ACTION_DOWN觸發(fā)

	public  void onLongPress(MotionEvent e) {
		Log.i("MyGesture", "onLongPress");
		Toast.makeText(this, "onLongPress", Toast.LENGTH_LONG).show();
 	}
}

以上這篇詳談OnTouchListener與OnGestureListener的區(qū)別就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論

西平县| 隆子县| 荣成市| 丹江口市| 辽中县| 永清县| 杭州市| 安远县| 洪湖市| 澄迈县| 崇礼县| 景德镇市| 景东| 土默特右旗| 伊川县| 乐昌市| 隆安县| 秭归县| 介休市| 禄劝| 建平县| 鄢陵县| 齐齐哈尔市| 筠连县| 金塔县| 合江县| 铜陵市| 马尔康县| 成安县| 双鸭山市| 滨州市| 兰坪| 宁德市| 上林县| 揭阳市| 嘉义市| 沛县| 财经| 建平县| 司法| 古丈县|