美文网首页旅行·在路上
Android_Touch点击事件

Android_Touch点击事件

作者: 书虫大王X | 来源:发表于2019-09-27 10:27 被阅读0次

    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;
        }
    }
    
    

    相关文章

      网友评论

        本文标题:Android_Touch点击事件

        本文链接:https://www.haomeiwen.com/subject/lkozectx.html