Android觸碰事件

來源:互聯網
上載者:User

標籤:cal   each   keyword   滾動   一段   div   count   this   移動   

OnTouchListener使用
public class ViewActivity extends Activity implements View.OnTouchListener {    @Override    protected void onCreate(Bundle savedInstanceState) {        requestWindowFeature(Window.FEATURE_NO_TITLE);        super.onCreate(savedInstanceState);        setContentView(R.layout.view_gestrue);        LinearLayout ll_context = (LinearLayout) findViewById(R.id.ll_context);        ll_context.setOnTouchListener(this);    }    @Override    public boolean onTouch(View v, MotionEvent event) {        switch (event.getActionMasked()) {            case MotionEvent.ACTION_DOWN:                Log.v("-->", "手指碰到螢幕");                break;            case MotionEvent.ACTION_MOVE:                Log.v("-->", "手指在移動");                break;            case MotionEvent.ACTION_OUTSIDE:                Log.v("-->", "手指離開view的邊界");                break;            case MotionEvent.ACTION_UP:                Log.v("-->", "手指離開螢幕");                break;            case MotionEvent.ACTION_SCROLL:                Log.v("-->", "手指在滑動");                break;            case MotionEvent.ACTION_POINTER_DOWN:                Log.v("-->", "非主手指碰到螢幕");                break;            case MotionEvent.ACTION_POINTER_UP:                Log.v("-->", "非主手指離開螢幕");                break;        }        return true;//攔截事件    }}
Tip:MotionEvent經常用法
event.getY();//觸碰點擷取距離v頂部的距離event.getRawY();//觸碰點擷取距離螢幕頂部的距離event.getPointerCount();//擷取觸碰手指的個數
GestureDetector使用:
//GestureDetector這個類對外提供了兩個介面:OnGestureListener,OnDoubleTapListener,另一個內部類SimpleOnGestureListener。

GestureDetector.OnGestureListener介面:用來通知普通的手勢事件,該介面有例如以下六個回呼函數:

1.onDown(MotionEvent e):down事件;

2.onSingleTapUp(MotionEvent e):一次點擊up事件;在touch down後又沒有滑動
(onScroll),又沒有長按(onLongPress),然後Touchup時觸發。
點擊一下很快的(不滑動)Touchup:
onDown->onSingleTapUp->onSingleTapConfirmed
點擊一下略微慢點的(不滑動)Touchup:
onDown->onShowPress->onSingleTapUp->onSingleTapConfirmed

3.onShowPress(MotionEvent e):down事件發生而move或則up還沒發生前觸發該事件。Touch了還沒有滑動時觸發(與onDown。onLongPress)比較onDown僅僅要Touch down一定立馬觸發。

而Touchdown後過一會沒有滑動先觸發onShowPress再是onLongPress。

所以Touchdown後一直不滑動
依照onDown->onShowPress->onLongPress這個順序觸發。

4.onLongPress(MotionEvent e):長按事件。Touch了不移動一直Touch down時觸發

5.onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY):滑動手勢事件。Touch了滑動一點距離後,在ACTION_UP時才會觸發參數:e1 第1個ACTION_DOWN MotionEvent 而且僅僅有一個;e2 最後一個ACTION_MOVE MotionEvent ;velocityX X軸上的移動速度,像素/秒 。velocityY Y軸上的移動速度,像素/秒.觸發條件:X軸的座標位移大於FLING_MIN_DISTANCE,且移動速度大於FLING_MIN_VELOCITY個像素/秒

6.onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY):在螢幕上拖動事件。

不管是用手拖動view,或者是以拋的動作滾動,都會多次觸發,這種方法在ACTION_MOVE動作發生時就會觸發
拋:手指觸動螢幕後,略微滑動後馬上鬆開

GestureDetector.OnDoubleTapListener介面:用來通知DoubleTap事件,相似於滑鼠的雙擊事件。

1.onDoubleTap(MotionEvent e):在雙擊的第二下。Touch down時觸發 。


2.onDoubleTapEvent(MotionEvent e):通知DoubleTap手勢中的事件。包括down、up和move事件(這裡指的是在雙擊之間發生的事件,比如在同一個地方雙擊會產生DoubleTap手勢,而在DoubleTap手勢裡面還會發生down和up事件,這兩個事件由該函數通知)。雙擊的第二下Touch down和up都會觸發,可用e.getAction()區分。
3.onSingleTapConfirmed(MotionEvent e):用來判定該次點擊是SingleTap而不是DoubleTap,假設連續點擊兩次就是DoubleTap手勢。假設僅僅點擊一次。系統等待一段時間後沒有收到第二次點擊則判定該次點擊為SingleTap而不是DoubleTap,然後觸發SingleTapConfirmed事件。

這種方法不同於onSingleTapUp,他是在GestureDetector確信使用者在第一次觸控螢幕幕後,沒有緊跟著第二次觸控螢幕幕。也就是不是“雙擊”的時候觸發

tip:
//distanceX。是前後兩次call的X距離,不是e2與e1的水平距離; 是前後兩次call的Y距離,不是e2與e1的垂直距離
用法:

1:繼承GestureDetector.OnGestureListener
2:執行個體化檢測器GestureDetector mDetector = new GestureDetector(ViewActivity.this, this);
3:在ontouch裡面回調方法

@Overridepublic boolean onTouch(View v, MotionEvent event) {  mDetector.onTouchEvent(event);  return true;}

參考連結:
使用者手勢檢測-GestureDetector使用具體解釋
android觸控,先瞭解MotionEvent

Android觸碰事件

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.