安卓学习笔记13:安卓触摸事件
文章目录
- 零、学习目标
- 一、安卓触摸事件概述
- 1、触摸分类
- 2、触摸动作
- 3、触摸监听器
- 4、触摸方法
- 5、触点个数与坐标
- 二、安卓单点触摸
- 三、教学案例——通过单点触摸移动米老鼠
- (一)运行效果
- (二)涉及知识点
- (三)实现步骤
- 1、创建安卓应用【MoveMickeyByTouch】
- 2、准备背景图片与米老鼠图片,拷贝到drawable目录里
- 3、布局资源文件activity_main.xml
- 4、主界面类MainActivity
- 5、启动应用,查看效果
- 6、修改主界面类MainActivity
- 7、启动应用,查看效果
- 8、修改主界面类MainActivity
- 9、启动应用,查看效果
- 10、查看修改后的主界面源代码
- 四、教学案例 —— 通过多点触摸缩放米老鼠
- (一)运行效果
- (二)涉及知识点
- (三)实现步骤
- 1、创建安卓应用【ZoomMickeyByTouch】
- 2、准备背景图片与米老鼠图片,拷贝到drawable目录里
- 3、主布局资源文件activity_main.xml
- 4、主界面类MainActivity
- 5、运行程序,查看结果
零、学习目标
- 能说出安卓触摸事件的两种类型
- 能说出安卓触摸包含的三个动作
- 能利用安卓触摸事件处理编写应用
一、安卓触摸事件概述
1、触摸分类
- 单点触摸
- 多点触摸
2、触摸动作
- 按下(
MotionEvent.ACTION_DOWN
) - 移动(
MotionEvent.ACTION_MOVE
) - 放开(
MotionEvent.ACTION_UP
)
3、触摸监听器
onTouchListener
4、触摸方法
- 在
onTouch()
方法里,我们可以根据不同动作编写不同事件处理代码。
5、触点个数与坐标
- 通过
MotionEvent
对象的getX()
和getY()
方法可以获得触摸点的坐标。如果是多点触摸,通过getPointerCount()
获取触点个数,然后通过getX(pointerIndex)
与getY(pointerIndex)
获得某个触点的坐标。
二、安卓单点触摸
在onTouch
方法里,我们可以根据不同动作编写不同的事件处理代码。按下、移动和释放三种不同的操作。通过MotionEvent
对象的getX()
和getY()
方法可以获得触摸点的坐标。
三、教学案例——通过单点触摸移动米老鼠
(一)运行效果
(二)涉及知识点
1、线性布局(LinearLayout
)
2、图像视图(ImageView
)
3、单点触摸事件(MotionEvent
…getX()
, getY()
)
(三)实现步骤
1、创建安卓应用【MoveMickeyByTouch】
2、准备背景图片与米老鼠图片,拷贝到drawable目录里
3、布局资源文件activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:id="@+id/root"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"android:background="@drawable/background" ><ImageViewandroid:id="@+id/ivMickey"android:layout_width="100dp"android:layout_height="120dp"android:scaleType="fitXY"android:src="@drawable/mickey" /></LinearLayout>
4、主界面类MainActivity
package net.hw.movemickey;import android.os.Bundle;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;import androidx.appcompat.app.AppCompatActivity;public class MainActivity extends AppCompatActivity {protected static final String TAG = "move_mickey_by_touch";private ImageView ivMickey;private LinearLayout root;private LinearLayout.LayoutParams LayoutParams;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);// 利用布局资源文件设置用户界面setContentView(R.layout.activity_main);// 通过控件资源索引获得控件实例ivMickey = (ImageView) findViewById(R.id.ivMickey);root = (LinearLayout) findViewById(R.id.root);// 设置根布局可以获得焦点root.setFocusable(true);// 让根布局获得焦点root.requestFocus();// 获取图像控件的布局参数LayoutParams = (LinearLayout.LayoutParams) ivMickey.getLayoutParams();// 给根布局注册触摸监听器,实现触摸监听器接口,编写触摸事件代码root.setOnTouchListener(new View.OnTouchListener() {@Overridepublic boolean onTouch(View v, MotionEvent event) {// 根据触摸动作执行不同的操作switch (event.getAction()) {case MotionEvent.ACTION_DOWN: // 触点按下Log.d(TAG, "ACTION_DOWN(" + event.getX() + ", " + event.getY() + ")");break;case MotionEvent.ACTION_MOVE: // 触点移动Log.d(TAG, "ACTION_MOVE(" + event.getX() + ", " + event.getY() + ")");break;case MotionEvent.ACTION_UP: // 触点放开Log.d(TAG, "ACTION_UP(" + event.getX() + ", " + event.getY() + ")");}// 根据变化的触点坐标来更新图像控件的布局参数LayoutParams.leftMargin = (int) event.getX();LayoutParams.topMargin = (int) event.getY();// 重新设置图像控件的布局参数ivMickey.setLayoutParams(LayoutParams);return true; // 设置为真,三个事件:down-->move-->up才会依次执行}});}
}
5、启动应用,查看效果
- 启动后,米老鼠在屏幕左上角
- 在模拟器屏幕上,按下鼠标,移动鼠标,放开鼠标,之后在LogCat里可以看到上述上述三种动作的位置坐标。
- 录屏演示单点触摸移动米老鼠
- 从录屏动画可以看到,移动鼠标,确实可以让米老鼠跟着动起来,但是有一个体验不好,就是触点与米老鼠隔了一段距离,这个问题应该如何解决呢?同学们,先试一试,看看能否搞定。
6、修改主界面类MainActivity
7、启动应用,查看效果
- 从录屏动画可以看到,移动鼠标,确实可以让米老鼠跟着动起来,但触点是在米老鼠的左上角,怎么让触点在米老鼠的中心位置呢?
8、修改主界面类MainActivity
9、启动应用,查看效果
10、查看修改后的主界面源代码
- 采用图像控件的setX()和setY()方法来修改图像控件的位置,因此关于布局参数的代码就可以删除了。
package net.hw.movemickey;import android.os.Bundle;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;import androidx.appcompat.app.AppCompatActivity;public class MainActivity extends AppCompatActivity {private static final String TAG = "move_mickey_by_touch";private ImageView ivMickey;private LinearLayout root;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);// 利用布局资源文件设置用户界面setContentView(R.layout.activity_main);// 通过控件资源标识符获取控件实例ivMickey = findViewById(R.id.ivMickey);root = findViewById(R.id.root);// 设置根布局可以获得焦点root.setFocusable(true);// 让根布局获取焦点root.requestFocus();// 给根布局注册触摸监听器,实现触摸监听器接口,编写触摸事件代码root.setOnTouchListener(new View.OnTouchListener() {@Overridepublic boolean onTouch(View view, MotionEvent event) {// 根据触摸动作执行不同的操作switch (event.getAction()) {case MotionEvent.ACTION_DOWN: // 触点按下Log.d(TAG, "ACTION_DOWN(" +event.getX() + ", " + event.getY() +")");break;case MotionEvent.ACTION_MOVE: // 触点移动Log.d(TAG, "ACTION_MOVE(" +event.getX() + ", " + event.getY() +")");break;case MotionEvent.ACTION_UP: // 触点放开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; // 设置为真,三个事件:down-->move-->up才会依次执行}});}
}
四、教学案例 —— 通过多点触摸缩放米老鼠
(一)运行效果
(二)涉及知识点
1、线性布局(LinearLayout
)
2、图像视图(ImageView
)
3、多点触摸事件(MotionEvent
…getX(pointerIndex)
、getY(pointerIndex)
)
(三)实现步骤
1、创建安卓应用【ZoomMickeyByTouch】
2、准备背景图片与米老鼠图片,拷贝到drawable目录里
3、主布局资源文件activity_main.xml
4、主界面类MainActivity
- 声明变量
- 实例化控件
- 设置根布局
- 获取图像控件的布局参数
- 给根布局注册触摸监听器
5、运行程序,查看结果
安卓学习笔记13:安卓触摸事件相关推荐
- 【安卓学习笔记】安卓的事件处理
安卓提供了两种方式的事件处理:基于回调的事件处理和基于监听的事件处理. 基于监听的事件处理 基于监听的事件处理一般包含三个要素,分别是: Event Source(事件源):事件发生的场所,通常是各个 ...
- 安卓学习笔记:安卓11访问/读写 Android/data 目录
省流提示:采用android studio工具开发,记录一次低级的开发,避免以后忘记或者踩坑. 最近有个业余项目开发到一小半,过程中需要读写 Android/data目录的文件,采用常规的文件操作总是 ...
- 2020年安卓学习笔记目录
文章目录 一.讲课笔记 二.安卓案例 三.安卓实训项目 四.学生安卓学习博客 五.安卓课后作业 (一)界面设计练习 1.制作登录界面 2.制作部队管理界面 3.制作灭火救援界面 4.制作交付界面 5. ...
- 安卓学习笔记07:事件处理、窗口跳转与传递数据
文章目录 零.学习目标 一.三个基本控件 1.标签控件(TextView) 2.编辑框控件(EditText) 3.按钮控件(Button) 二.安卓事件处理机制 (一)安卓事件处理概述 (二)安卓事 ...
- 安卓学习笔记3——登录界面UI
安卓学习笔记3--登录界面UI 一.登录界面UI 1.根据需求写UI 2.主活动 3.主活动调用的读写文件的工具类 4.效果展示 二.总结与改进 不足: 1.密码分割采用字符串:当密码和用户名包含该字 ...
- xamarin学习笔记A19(安卓AIDL)
(每次学习一点xamarin就做个学习笔记和视频来加深记忆巩固知识) 如有不正确的地方,请帮我指正. AIDL简介 AIDL(Android Interface Definition Langua ...
- 很low的安卓学习笔记(一、实用技巧)
很low的安卓学习笔记(一.实用技巧) 一.学习了几天的实用技巧小总结: 1.规范的定义内容的格式: 2.一些快捷键 3.将xxx.xml布局改为Activity中可以调用的View视图 4.当左下角 ...
- 安卓学习笔记之骚扰拦截
安卓学习笔记之骚扰拦截 1.监听电话状态 2.检测来电号码是否匹配拦截条件 3.若匹配,则挂断电话 实例代码: 获取TelephonyManager 对象,并监听来电状态 TelephonyManag ...
- Linux学习笔记13
Linux学习笔记13 Linux学习笔记13 配置Nagios 基本介绍 Nagios安装 - 服务端 Nagios安装 - 客户端 监控中心添加被监控主机 配置文件的简单说明 继续添加需要服务端通 ...
最新文章
- Codeforces Round #462 (Div. 2)题解
- 在VS2012中安装使用cppcheck
- 好看的按钮组件_这个发光的外骨骼盔甲是什么?为什么它如此好看!
- eclipse maven创建web项目
- Summer training round2 #10(Training 30)
- 杭电oj首字母变大写
- pyltp环境的搭建
- 2017中国屏幕分辨率统计
- 如何将excel文件联系人转换成vcf文件
- QQ2000 的聊天室刷屏机设计技术
- 京东、搜狗“带狗”都好好的,为何司机对快狗打车不满意?
- 定时器 java qua_spring项目中使用定时任务
- 榆树计算机课,吉林省榆树市弓棚镇武龙中学校七年级信息技术:第九课 Excel表格计算 教案+课件 (2份打包)...
- 基于LXC的GPU服务器搭建
- C#访问大华网络摄像头
- 机器学习之随机森林RandomForestRegressor
- OpenJDK16 ZGC 源码分析
- QQ IDKey生成
- 豆瓣电台WP7客户端 开发记录 8
- Windows沙拉:为什么下载的文件打开时会有警告,而且会被“锁定”?
热门文章
- 漫谈LiteOS之开发板-串口(基于GD32450i-EVAL)
- 【开发者portal在线开发插件系列四】数组 及 可变长度数组
- android打包闪退,使用最新hx 进行android打包闪退
- c语言 b的作用,在C语言中各个标点符号的作用
- 玩游戏提示计算机性能过低,如果玩游戏的fps低怎么办?八个问题和九个解决方案...
- -6dB的效果也不错
- R语言学习笔记(四)参数估计
- poj 1287 Networking 最小生成树 Kruskal Prim
- day13 java的多态
- python try exception类_python——异常类型