目录
触摸常用属性:
属性 | 含义 |
MotionEvent.ACTION_DOWN | 按下 |
MotionEvent.ACTION_MOVE | 移动 |
MotionEvent.ACTION_UP | 放开 |
触摸监听器
触摸监听器 - onTouchListener
- 接口
触摸方法
在onTouch()
抽象 方法里,我们可以根据不同动作编写不同事件处理代码。
触点个数与坐标
通过MotionEvent
对象的getX()
和getY()
方法可以获得触摸点的坐标。如果是多点触摸,通过getPointerCount()
获取触点个数,然后通过getX(pointerIndex)
与getY(pointerIndex)
获得某个触点的坐标。
案例演示
基于Empty Activity新建MoveMickeyByTouch
将背景图片和图像拷贝进去
打开字符串资源文件改变应用标题(可以省略)
打开 主布局资源文件 - activity_main.xml改为线性布局并增加图像控件
具体代码:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/root" android:background="@drawable/img01" android:orientation="vertical" tools:context=".MainActivity"> <ImageView android:id="@+id/iv_mickey" android:layout_width="100dp" android:layout_height="120dp" android:scaleType="fitXY" android:src="@drawable/img02"/> <!-- scaleType=“fitXY” 将原图进行横方向(即XY方向)的拉伸后绘制的。--> </LinearLayout>
打开主界面类 - MainActivity输入
具体代码:
package net.zyt.move_mickey_by_touch; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.MotionEvent; import android.view.View; import android.widget.ImageView; import android.widget.LinearLayout; public class MainActivity extends AppCompatActivity { private ImageView ivMickey;//米老鼠图形控件 private LinearLayout root;//米老鼠图形控件 private final String TAG="move_mickey_by_touch";//标记常量 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //利用布局资源文件设置用户界面 setContentView(R.layout.activity_main); //通过资源标识符获取控件实例 root=findViewById(R.id.root); ivMickey=findViewById(R.id.iv_mickey); //让根布局获取焦点 root.setFocusable(true); root.requestFocus(); //给线性根部局注册触摸监听器,实现触摸监听器接口,编写触摸事件代码 root.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { //根据不同触摸动作执行不同操作 switch (event.getAction()){ case MotionEvent.ACTION_DOWN://0触点按下 //输出触点坐标 Log.d(TAG,"ACTION_DOWN("+event.getX()+","+event.getY()+")"); break; case MotionEvent.ACTION_MOVE://2,触点移动 //输出触点坐标 Log.d(TAG,"ACTION_MOVE("+event.getX()+","+event.getY()+")"); break; case MotionEvent.ACTION_UP://1,触点放开 //输出触点坐标 Log.d(TAG,"ACTION_UP("+event.getX()+","+event.getY()+")"); break; } //设置米老鼠图像控件坐标 ivMickey.setX(event.getX()-ivMickey.getWidth()/2); ivMickey.setY(event.getY()-ivMickey.getHeight()/2); return true;//设置为ture,三个事件:down-->move-->up才会依次执行 } }); } }