目录
触摸常用属性:
| 属性 | 含义 |
| 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才会依次执行
}
});
}
}
最后运行效果:

该博客围绕Android触摸事件展开,介绍了触摸常用属性、触摸监听器、触摸方法,以及如何获取触点个数与坐标。还通过案例演示,展示了基于Empty Activity新建项目,进行资源文件修改和代码编写,最后呈现运行效果。
1203

被折叠的 条评论
为什么被折叠?



