Android事件處理機(jī)制是基于Listener實(shí)現(xiàn)的,比如觸摸屏相關(guān)的事件,是通過(guò)OnTouchListener實(shí)現(xiàn)的;而手勢(shì)是通過(guò)OnGestureListener實(shí)現(xiàn)的,那么這兩者有什么關(guān)聯(lián)呢?
成都創(chuàng)新互聯(lián)公司一直秉承“誠(chéng)信做人,踏實(shí)做事”的原則,不欺瞞客戶(hù),是我們最起碼的底線! 以服務(wù)為基礎(chǔ),以質(zhì)量求生存,以技術(shù)求發(fā)展,成交一個(gè)客戶(hù)多一個(gè)朋友!為您提供網(wǎng)站設(shè)計(jì)、成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)頁(yè)設(shè)計(jì)、成都小程序開(kāi)發(fā)、成都網(wǎng)站開(kāi)發(fā)、成都網(wǎng)站制作、成都軟件開(kāi)發(fā)、成都App定制開(kāi)發(fā)是成都本地專(zhuān)業(yè)的網(wǎng)站建設(shè)和網(wǎng)站設(shè)計(jì)公司,等你一起來(lái)見(jià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事件的類(lèi)型,包括 ACTION_DOWN(按下觸摸屏), ACTION_MOVE(按下觸摸屏后移動(dòng)受力點(diǎn)), ACTION_UP(松開(kāi)觸摸屏)和ACTION_CANCEL(不會(huì)由用戶(hù)直接觸發(fā))。借助對(duì)于用戶(hù)不同操作的判斷,結(jié)合getRawX()、 getRawY()、getX()和getY()等方法來(lái)獲取坐標(biāo)后,我們可以實(shí)現(xiàn)諸如拖動(dòng)某一個(gè)按鈕,拖動(dòng)滾動(dòng)條等功能。
可以看到OnTouchListener只能監(jiān)聽(tīng)到三種觸摸事件,即按下,移動(dòng),松開(kāi),如果想要監(jiān)聽(tīng)到雙擊、滑動(dòng)、長(zhǎng)按等復(fù)雜的手勢(shì)操作,這個(gè)時(shí)候就必須得用到OnGestureListener了。
OnGestureListener
接著上面的例子,這次加入手勢(shì)監(jiān)聽(tīng):
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); } // 用戶(hù)輕觸觸摸屏,由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; } // 用戶(hù)輕觸觸摸屏,尚未松開(kāi)或拖動(dòng),由一個(gè)1個(gè)MotionEvent ACTION_DOWN觸發(fā), 注意和onDown()的區(qū)別,強(qiáng)調(diào)的是沒(méi)有松開(kāi)或者拖動(dòng)的狀態(tài) public void onShowPress(MotionEvent e) { Log.i("MyGesture", "onShowPress"); Toast.makeText(this, "onShowPress", Toast.LENGTH_SHORT).show(); } // 用戶(hù)(輕觸觸摸屏后)松開(kāi),由一個(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; } // 用戶(hù)按下觸摸屏、快速移動(dòng)后松開(kāi),由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; } // 用戶(hù)按下觸摸屏,并拖動(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; } // 用戶(hù)長(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è)參考,也希望大家多多支持創(chuàng)新互聯(lián)。
本文標(biāo)題:詳談OnTouchListener與OnGestureListener的區(qū)別
轉(zhuǎn)載注明:http://chinadenli.net/article0/geodoo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)建站、自適應(yīng)網(wǎng)站、商城網(wǎng)站、標(biāo)簽優(yōu)化、動(dòng)態(tài)網(wǎng)站、移動(dòng)網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)