文章目录

  • 零、学习目标
  • 一、安卓触摸事件概述
    • 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. 能说出安卓触摸包含的三个动作
  3. 能利用安卓触摸事件处理编写应用

一、安卓触摸事件概述

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、单点触摸事件(MotionEventgetX(), 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、多点触摸事件(MotionEventgetX(pointerIndex)getY(pointerIndex)

(三)实现步骤

1、创建安卓应用【ZoomMickeyByTouch】


2、准备背景图片与米老鼠图片,拷贝到drawable目录里

3、主布局资源文件activity_main.xml

4、主界面类MainActivity

  • 声明变量
  • 实例化控件
  • 设置根布局
  • 获取图像控件的布局参数
  • 给根布局注册触摸监听器

5、运行程序,查看结果

安卓学习笔记13:安卓触摸事件相关推荐

  1. 【安卓学习笔记】安卓的事件处理

    安卓提供了两种方式的事件处理:基于回调的事件处理和基于监听的事件处理. 基于监听的事件处理 基于监听的事件处理一般包含三个要素,分别是: Event Source(事件源):事件发生的场所,通常是各个 ...

  2. 安卓学习笔记:安卓11访问/读写 Android/data 目录

    省流提示:采用android studio工具开发,记录一次低级的开发,避免以后忘记或者踩坑. 最近有个业余项目开发到一小半,过程中需要读写 Android/data目录的文件,采用常规的文件操作总是 ...

  3. 2020年安卓学习笔记目录

    文章目录 一.讲课笔记 二.安卓案例 三.安卓实训项目 四.学生安卓学习博客 五.安卓课后作业 (一)界面设计练习 1.制作登录界面 2.制作部队管理界面 3.制作灭火救援界面 4.制作交付界面 5. ...

  4. 安卓学习笔记07:事件处理、窗口跳转与传递数据

    文章目录 零.学习目标 一.三个基本控件 1.标签控件(TextView) 2.编辑框控件(EditText) 3.按钮控件(Button) 二.安卓事件处理机制 (一)安卓事件处理概述 (二)安卓事 ...

  5. 安卓学习笔记3——登录界面UI

    安卓学习笔记3--登录界面UI 一.登录界面UI 1.根据需求写UI 2.主活动 3.主活动调用的读写文件的工具类 4.效果展示 二.总结与改进 不足: 1.密码分割采用字符串:当密码和用户名包含该字 ...

  6. xamarin学习笔记A19(安卓AIDL)

    (每次学习一点xamarin就做个学习笔记和视频来加深记忆巩固知识) 如有不正确的地方,请帮我指正. AIDL简介   AIDL(Android Interface Definition Langua ...

  7. 很low的安卓学习笔记(一、实用技巧)

    很low的安卓学习笔记(一.实用技巧) 一.学习了几天的实用技巧小总结: 1.规范的定义内容的格式: 2.一些快捷键 3.将xxx.xml布局改为Activity中可以调用的View视图 4.当左下角 ...

  8. 安卓学习笔记之骚扰拦截

    安卓学习笔记之骚扰拦截 1.监听电话状态 2.检测来电号码是否匹配拦截条件 3.若匹配,则挂断电话 实例代码: 获取TelephonyManager 对象,并监听来电状态 TelephonyManag ...

  9. Linux学习笔记13

    Linux学习笔记13 Linux学习笔记13 配置Nagios 基本介绍 Nagios安装 - 服务端 Nagios安装 - 客户端 监控中心添加被监控主机 配置文件的简单说明 继续添加需要服务端通 ...

最新文章

  1. Codeforces Round #462 (Div. 2)题解
  2. 在VS2012中安装使用cppcheck
  3. 好看的按钮组件_这个发光的外骨骼盔甲是什么?为什么它如此好看!
  4. eclipse maven创建web项目
  5. Summer training round2 #10(Training 30)
  6. 杭电oj首字母变大写
  7. pyltp环境的搭建
  8. 2017中国屏幕分辨率统计
  9. 如何将excel文件联系人转换成vcf文件
  10. QQ2000 的聊天室刷屏机设计技术
  11. 京东、搜狗“带狗”都好好的,为何司机对快狗打车不满意?
  12. 定时器 java qua_spring项目中使用定时任务
  13. 榆树计算机课,吉林省榆树市弓棚镇武龙中学校七年级信息技术:第九课 Excel表格计算 教案+课件 (2份打包)...
  14. 基于LXC的GPU服务器搭建
  15. C#访问大华网络摄像头
  16. 机器学习之随机森林RandomForestRegressor
  17. OpenJDK16 ZGC 源码分析
  18. QQ IDKey生成
  19. 豆瓣电台WP7客户端 开发记录 8
  20. Windows沙拉:为什么下载的文件打开时会有警告,而且会被“锁定”?

热门文章

  1. 漫谈LiteOS之开发板-串口(基于GD32450i-EVAL)
  2. 【开发者portal在线开发插件系列四】数组 及 可变长度数组
  3. android打包闪退,使用最新hx 进行android打包闪退
  4. c语言 b的作用,在C语言中各个标点符号的作用
  5. 玩游戏提示计算机性能过低,如果玩游戏的fps低怎么办?八个问题和九个解决方案...
  6. -6dB的效果也不错
  7. R语言学习笔记(四)参数估计
  8. poj 1287 Networking 最小生成树 Kruskal Prim
  9. day13 java的多态
  10. python try exception类_python——异常类型