Android APK开发基础——用户交互之触摸手势

1、触摸手势

1、1介绍

当用户把用一根或多根手指放在触摸屏上,并且应用把这样的触摸方式解释为特定的手势时,“触摸手势”就发生了。相应地,检测手势也就有以下两个阶段:

  1. 收集触摸事件的相关数据。
  2. 分析这些数据,看它们是否符合app所支持的手势的标准。

 

1、2 “触摸手势”有哪些

 

 

短按

长按

滑动

滑屏(快速滑动,还有一个惯性的过程)

双击

 

2、收集数据

当用户第一次触摸屏幕时,手势就开始了。其后系统会持续地追踪用户手指的位置,在用户手指全都离开屏幕时,手势结束。在整个交互期间,被分发给 onTouchEvent() 函数的 MotionEvent 对象,提供了每次交互的详细信息。

2.1、为Activity或View捕获触摸事件

为了捕获Activity或View中的触摸事件,我们可以重写onTouchEvent()回调函数。

2.2、捕获单个view的触摸事件

 

3、检测手势

Android提供了GestureDetector.OnGestureListener、GestureDetector.OnDoubleTapListener类来检测常用的手势。它所支持的手势包括onDown()onLongPress()onFling() 等。我们可以把GestureDetector和上面描述的onTouchEvent()函数结合在一起使用。

3.1、检测所有支持的手势

3.2、检测部分支持的手势

 

 

 

4、举例

 

4.1 步骤

要使用GestureDetector,有三步要走:

1、创建GestureDetector实例mGestureDetector;
2、onTouch(View v, MotionEvent event)中拦截;

3、创建OnGestureListener监听函数,实现“触摸手势”分类;

 

4.2 demo

1、创建GestureDetector实例mGestureDetector;

 

private GestureDetectorCompat mDetector;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mDetector = new GestureDetectorCompat(this,this);
    mDetector.setOnDoubleTapListener(this);
}

2、onTouch(View v, MotionEvent event)中拦截;

 

@Override
public boolean onTouchEvent(MotionEvent event){
    this.mDetector.onTouchEvent(event);
    // Be sure to call the superclass implementation
    return super.onTouchEvent(event);
}

3、创建OnGestureListener监听函数,实现“触摸手势”分类;

 

@Override
public boolean onDown(MotionEvent event) {
    Log.d(DEBUG_TAG,"onDown: " + event.toString()+ ">>>>>>>>短按");
    return true;
}

 

@Override
public void onLongPress(MotionEvent event) {
    Log.d(DEBUG_TAG, "onLongPress: " + event.toString() + ">>>>>>>>长按");
}
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
                        float distanceY) {
    Log.d(DEBUG_TAG, "onScroll: " + e1.toString()+e2.toString() + ">>>>>>>>滑动");
    return true;
}
@Override
public boolean onSingleTapUp(MotionEvent event) {
    Log.d(DEBUG_TAG, "onSingleTapUp: " + event.toString() + ">>>>>>>>单击");
    return true;
}

@Override
public boolean onDoubleTap(MotionEvent event) {
    Log.d(DEBUG_TAG, "onDoubleTap: " + event.toString() + ">>>>>>>>双击");
    return true;
}
final int FLING_MIN_DISTANCE = 100, FLING_MIN_VELOCITY = 200;
@Override
public boolean onFling(MotionEvent event1, MotionEvent event2,
                       float velocityX, float velocityY) {
    Log.d(DEBUG_TAG, "onFling: " + event1.toString()+event2.toString());
    if (event1.getX() - event2.getX() > FLING_MIN_DISTANCE
            && Math.abs(velocityX) > FLING_MIN_VELOCITY) {
        // Fling left
        Log.d(DEBUG_TAG, "Fling left"+ ">>>>>>>>向左滑屏");
        Toast.makeText(MainActivity.this, "Fling Left", Toast.LENGTH_SHORT).show();
    } else if (event2.getX() - event1.getX() > FLING_MIN_DISTANCE
            && Math.abs(velocityX) > FLING_MIN_VELOCITY) {
        // Fling right
        Log.d(DEBUG_TAG, "Fling right"+ ">>>>>>>>向右滑屏");
        Toast.makeText(MainActivity.this, "Fling Right", Toast.LENGTH_SHORT).show();
    }
    return true;
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值