旅行·在路上

Android_Touch点击事件

2019-09-27  本文已影响0人  书虫大王X

1.什么是Touch事件:

用户点按屏幕,Touch事件产生;用户的手指离开屏幕,Touch事件结束。Touch事件被封装在MotionEvent中。


touch事件

2.Touch是事件的类型:

事件类型 说明
ACTION_DOWN 手指按下
ACTION_UP 手指离开屏幕
ACTION_MOVE 手指在屏幕上移动
ACTION_POINTER_DOWN 多手指按下
ACTION_POINTER_UP 多手指抬起
ACTION_CANCEL 取消点击事件

3.Touch事件的传递:

Touch事件传递时,从最下层开始向上层传递,也就是说出发点为Activity,逐层向上传递。Touch方法的返回值类型为Boolean类型,当返回值为true时,表示该事件被这个图层接收并消费了,事件不会继续传递;当返回值为false时,表示该事件被这个图层接收了,但不消费,事件还会继续往下传递。

4.常用方法:

方法 说明
MotionEventgetAction() 获取触摸事件,如:ACTION_DONW、ACTION_UP、ACTION_MOVE、以及ACTION_CANCEL
MotionEvent.getX() 消费触摸点的View从触摸点到它最左侧的距离
MotionEvent.getY() 消费触摸点的View从触摸点到它最上侧的距离
MotionEvent.getRawX() 消费触摸点的View从触摸点到屏幕最左侧的距离
MotionEvent.getRawY() 消费触摸点的View从触摸点到屏幕最左侧的距离

5.Touch事件的简单应用:

项目功能:创建一个图块获取Touch事件,使其跟随手指在屏幕上移动

第一步:在xml文件中创建一个红色视图:

//将布局方式改为相对布局
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity"
    //给容器加ID,方便外部调用
    android:id="@+id/rl">

<View
        android:id="@+id/v"
        android:layout_width="100dp"
        android:layout_height="100dp"
        //设置红色背景颜色
        android:background="@color/colorAccent"/>

第二部:在MainActivity中找到容器、View视图,并重写onTouch方法:

    //将视图和容器全局化
    RelativeLayout rl;
    View view;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        rl = findViewById(R.id.rl);
        view = findViewById(R.id.v);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        //获取触摸事件
        int action = event.getAction();
        if (action == MotionEvent.ACTION_DOWN){
            // 获取触摸点坐标
            int x = (int)event.getX();
            int y = (int)event.getY();
            // 改变视图坐标
            view.setX(x);
            view.setY(y);
        }else  if (action == MotionEvent.ACTION_MOVE){
             // 获取触摸点坐标
            int x = (int)event.getX();
            int y = (int)event.getY();
            // 改变视图坐标
            view.setX(x);
            view.setY(y);
        }
        return true;
    }
}

上一篇 下一篇

猜你喜欢

热点阅读