Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> android觸碰事件

android觸碰事件

編輯:關於Android編程

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裡面回調方法

@Override
public boolean onTouch(View v, MotionEvent event) {
  mDetector.onTouchEvent(event);
  return true;
}
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved