Android入门第38天-使用随鼠标移动的圆点来熟悉onTouchEvent

news2024/9/21 16:18:38

简介

平时包括之前的例子大量是基于TouchListener如:onClick这种一类的事件。

今天给大家带来的是TouchListener与OnTouchEvent的比较,以及多点触碰的知识点! TouchListener是基于监听的,而OnTouchEvent则是基于回调的!

因此我们通过一个小例子,来擅述同样是触碰事件的ouTouchEvent是什么样的。

onTouchEvent应用场景

onTouchEvent更多的是用于自定义的view,所有的view类中都重写了该方法,而这种触摸事件是基于回调的,也就是说:如果我们返回的值是false的话,那么事件会继续向外传播,由外面的容器或者Activity进行处理!当然还涉及到了手势(Gesture),这个我们会在后面进行详细的讲解!onTouchEvent其实和onTouchListener是类似的,只是处理机制不用,前者是回调,后者是监听模式!

样例说明

代码示例: 定义一个简单的view,绘制一个蓝色的小圆,可以跟随手指进行移动

实现代码: CircleView.java。

全代码

前端

CircleView.java

对,你没看错!

这个不是.xml文件。它长下面这个样

package org.mk.android.demo;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;

public class CircleView extends View {
    public float X = 50;
    public float Y = 50;
    //创建画笔
    Paint paint = new Paint();

    public CircleView(Context context, AttributeSet set)
    {
        super(context,set);
    }

    @Override
    public void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        paint.setColor(Color.RED);
        canvas.drawCircle(X,Y,50,paint);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        this.X = event.getX();
        this.Y = event.getY();
        //通知组件进行重绘
        this.invalidate();
        return true;
    }
}

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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"
    tools:context=".MainActivity">
    <org.mk.android.demo.CircleView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
</RelativeLayout>

我们把这个java在activity_main.xml文件中如上这样引用。此时设计器已经显示出来效果了。

后端

package org.mk.android.demo;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
}

哈哈哈,是一个光板。

因为所有的逻辑、触碰事件都已经在CircleView.java里实现了。

运行起来后,你的界面上就会有一个小红圆圈,请你用鼠标拖着这个小红圆圈不要放到处拖,这个小红圆圈也会跟随着你的鼠标到处乱跑。

自己请动一下手试试看吧。

后续

对于单指、双指缩放等手势,其实也很简单,就是我们的onTouchEvent(MotionEvent event)里的这个MotionEvent,它还有额外几个事件

  • MotionEvent.ACTION_POINTER_DOWN:当屏幕上已经有一个点被按住,此时再按下其他点时触发。
  •  MotionEvent.ACTION_POINTER_UP:当屏幕上有多个点被按住,松开其中一个点时触发(即非最后一个点被放开时)。

因此我留下一个回家作业,即:在Android上实现以下这两个功能让大家去自己试试

  1. 单指点击一个图片拖动;
  2. 双指对着一个图片进行“缩放”,便得相应的图片的大小也跟着你的双指的缩放作“伸缩”;

真心很简单,提示:提供以下原理性代码供你去实现这个小作业。

 switch (event.getAction() & MotionEvent.ACTION_MASK) {
        // 单指
        case MotionEvent.ACTION_DOWN:
            
            break;
        // 双指
        case MotionEvent.ACTION_POINTER_DOWN:

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/60234.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SNMP协议——网络管理概述

作者简介&#xff1a;一名在校云计算网络运维学生、每天分享网络运维的学习经验、和学习笔记。 座右铭&#xff1a;低头赶路&#xff0c;敬事如仪 个人主页&#xff1a;网络豆的主页​​​​​​ 目录 前言 一.网络管理概述 1.网络管理概念 2.网络管理功能 1.配置管理 …

Xshell连接如何记住用户秘钥文件

场景描述 服务器ssh登录有2种常用的方式&#xff1a; 方式1&#xff1a;用户密码认证&#xff0c;登录时输入用户名和密码。方式2&#xff1a;公钥认证(Public Key User Authentication)&#xff0c;登录时提供用户名私钥。公钥需要存储一份在服务器上该用户的~/.ssh/authori…

是德科技DSOX2002A型号示波器的使用

文章目录图使用自检电路单次触发按键恢复出厂设置水平调整区水平位移调整按钮水平时机调整旋钮垂直调整区通道启用按钮垂直档位调节旋钮垂直位移调整旋钮测量区图 使用 自检 黑色鳄鱼夹接地&#xff0c;伸缩探钩挂到左侧。 按下auto按键 使用测量按键可以调出波形的峰峰值与频…

Redis (持续更新…)

提到这个词&#xff0c;脑海里一连串&#xff1a;它是什么&#xff0c;能干什么&#xff0c;怎么干的&#xff0c;不用它行不行&#xff0c;有没有同类…… 其实就是5W2H&#xff0c;或者说凡事多问个为什么 先放官网&#xff1a; ​​​​​​Redis CRUG网站 它是开源存储…

非零基础自学Golang 2 开发环境 2.5 第一个Go 程序

非零基础自学Golang 学习文档地址&#xff1a;https://www.topgoer.cn/ 本文仅用于学习记录&#xff0c;不存在任何商业用途&#xff0c;如侵删【已联系过文档作者】 文章目录非零基础自学Golang2 开发环境2.5 第一个Go 程序2.5.1 Hello World2 开发环境 2.5 第一个Go 程序 2…

IDEA创建Java Web项目

✅作者简介&#xff1a;热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏&#xff1a;JAVA开发者…

【电商】跨境电商「保税」业务(附支付宝、微信对接指南)

​电商作为产品的一个大类&#xff0c;很多业务相关的东西都比社交、工具类产品更为复杂&#xff1b;而且涉及到经济、支付等环节&#xff0c;让很多新人头疼不已。这篇文章作者从跨境电商的「保税」业务出发&#xff0c;以支付宝、微信的对接为例&#xff0c;为你详解跨境电商…

Python之面向对象

目录 一、类的定义 二、魔法方法 三、属性管理 四、封装 五、继承&多态 一、类的定义 # 类封装 class Dog:name"修狗"age3dDog() print(fname is {d.name} ,age is {d.age}) # python与java关于类封装的区别 d.sex"母" print(fname is {d.name} ,…

逸飞激光在科创板IPO过会:前三季度营收约3亿元,同比增长59%

近日&#xff0c;上海证券交易所科创板披露的信息显示&#xff0c;武汉逸飞激光股份有限公司&#xff08;下称“逸飞激光”&#xff09;获得上市委会议通过。据贝多财经了解&#xff0c;逸飞激光于2022年6月24日在科创板递交招股书。 本次冲刺科创板上市&#xff0c;逸飞激光计…

【大数据入门核心技术-Hadoop】Hadoop高可用集群搭建

目录 一、Hadoop部署的三种方式 1、Standalone mode&#xff08;独立模式&#xff09; 2、Pseudo-Distributed mode&#xff08;伪分布式模式&#xff09; 3、Cluster mode&#xff08;集群模式&#xff09; 二、准备工作 1、先完成zk高可用搭建 2、/etc/hosts增加内容 …

数据科学家赚多少?数据全分析与可视化 ⛵

&#x1f4a1; 作者&#xff1a;韩信子ShowMeAI &#x1f4d8; 数据分析实战系列&#xff1a;https://www.showmeai.tech/tutorials/40 &#x1f4d8; AI 岗位&攻略系列&#xff1a;https://www.showmeai.tech/tutorials/47 &#x1f4d8; 本文地址&#xff1a;https://www…

[附源码]计算机毕业设计JAVA一点到家小区微帮服务系统

[附源码]计算机毕业设计JAVA一点到家小区微帮服务系统 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM…

Linux简单命令

Linux简单命令 现在写几个使用Linux时最常使用的简单命令 1.将一个文件复制到另一个文件夹内&#xff0c;比如将backboneA复制到backboneB路径下&#xff1a; cp -r /文件夹路径backboneA/* /文件夹路径backboneB/2.查看当前目录下有多少个文件及文件夹&#xff0c;需在终端输…

C++闲谈04——设计模式

C闲谈04——设计模式 单例模式 饿汉式单例模式 #include<iostream> #include<mutex>using namespace std; mutex mtx;class SingleTon{ public:static SingleTon* GetInstance() {if (instance nullptr) {lock_guard<mutex> lk(mtx); // 不是尖括号inst…

修复 爱普生 EPSON L4156 打印机 无法打印,开关 WIFI 墨水 三个灯同时闪烁的问题

L4151 L4153 L4156 L4158 L4163 L4165 L4166 L4168 L4169 喷墨一体机清零图解 清零前请取消打印任务&#xff0c;打印机用 USB 线接电脑并开启 工具下载地址 EPSON打印机清零软件1.双击[Resetter.exe]启动软件,点击[Select],选择 Port 打 印机型号&#xff0c;然后点[OK]&#…

第8章 注意力机制与外部记忆

系列文章目录 第1章 绪论 第2章 机器学习概述 第3章 线性模型 第4章 前馈神经网络 第5章 卷积神经网络 第6章 循环神经网络 第7章 网络优化与正则化 第8章 注意力机制与外部记忆 第9章 无监督学习 第10章 模型独立的学习方式 第11章 概率图模型 第12章 深度信念网络 第13章 深…

Linux UART编程 驱动蓝牙芯片

在熟悉了UART概念后&#xff0c;我们要学以致用&#xff0c;在Linux用起来来驱动起来蓝牙芯片&#xff01; 我们直接借用man来看下&#xff0c;命令如下&#xff1a; man termios 1.头文件引用 #include <termios.h> #include <unistd.h> 2.串口打开关闭 open…

Python预测2022世界杯1/8决赛胜负

目录: why to do?how to do?why to do? 简单介绍一下为什么要做这个吧? 首先呢, 最近一直在看基于tensorflow框架实现facenet等一些人脸识别的网络. 再加上昨天(2022年12月3日)是2022年世界杯1/8决赛第一个比赛日. 就在不同平台搜了一下, 看看有没有其他大牛也做了这方面的…

设计模式——策略模式

设计模式中的复用性指的是编译单位&#xff08;二进制层面&#xff09;的复用性&#xff08;编译、测试、部署后是原封不动的&#xff09; 动机&#xff08;Motivation&#xff09; 在软件构建过程中&#xff0c;某些对象使用的算法可能多种多样&#xff0c;经常改变&#xf…

Netty系列(五):源码解读ServerBootstrapAcceptor类职能,探究Netty启动流程

ServerBootstrapAcceptor是Netty服务端用来接收客户端连接的核心类&#xff0c;本文将介绍ServerBootstrapAcceptor的职能。 init方法 在上一篇文章源码解读 backlog 参数作用中我们知道&#xff0c;在Netty服务端启动时&#xff0c;会调用ServerBootstrap.bind()绑定本地端口…