Android中运动事件的处理

news2024/11/23 20:40:17

1.目录

目录

1.目录

2.前言

3.程序演示

4.第二种程序示例

5.扩展


2.前言

        触摸屏(TouchScreen)和滚动球(TrackBall)是 Android 中除了键盘之外的主要输入设备。如果需要使用触摸屏和滚动球,主要可以通过使用运动事件(MotionEvent)用于接收它们的信息。触摸屏和滚动球事件主要通过实现以下 2 个函数来接收:

public boolean onTouchEvent(MotionEvent event) 
public boolean onTrackballEvent(MotionEvent event)

        在以上两个函数中,MotionEvent 类作为参数传入,在这个参数中可以获得运动事件的各种信息。

3.程序演示

        本例介绍另外触摸屏事件的程序,这个程序在 UI 的界面中,显示当前的 MotionEvent 的动作和位置。布局文件内容如下所示:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical">
    <TextView android:id="@+id/action"
        android:textSize = "20sp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="@color/black"/>
    <TextView android:id="@+id/postion"
        android:textSize = "20sp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="@color/black"/>
</LinearLayout>

        程序代码如下:

package xyz.dritrtj.myexer;

import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.MotionEvent;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity{
    private static final String TAG = "TestMotionEvent";
    TextView mAction;
    TextView mPostion;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mAction =findViewById(R.id.action);
        mPostion = findViewById(R.id.postion);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        int Action = event.getAction();
        float X = event.getX();
        float Y = event.getY();
        Log.v(TAG, "Action = "+ Action );
        Log.v(TAG, "("+X+","+Y+")");
        mAction.setText("Action = "+ Action);
        mPostion.setText("Postion = ("+X+","+Y+")");
        return true;
    }
}

        运行效果如下:

4.第二种程序示例

        另外一个示例程序,当触摸屏按下、移动、抬起的时候,在坐标处绘制不同颜色的点,在标题栏中显示当时的动作和坐标。程序的结果如图所示:

        程序代码如下所示,注意这里没有使用布局文件实例化,复制时注意onCreate方法中的内容:

package xyz.dritrtj.myexer;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.os.Bundle;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity{
    private static final String TAG = "TestMotionEvent2";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(new TestMotionView(this));
    }
    public class TestMotionView extends View {
        private Paint mPaint = new Paint();
        private int mAction;
        private float mX;
        private float mY;
        public TestMotionView(Context c) {
            super(c);
            mAction = MotionEvent.ACTION_UP;
            mX = 0;
            mY = 0;
        }

        @Override
        protected void onDraw(Canvas canvas) {
            Paint paint = mPaint;
            canvas.drawColor(Color.WHITE);
            if(MotionEvent.ACTION_MOVE == mAction) { // 移动动作
                paint.setColor(Color.RED);
            }else if(MotionEvent.ACTION_UP == mAction) { // 抬起动作
                paint.setColor(Color.GREEN);
            }else if(MotionEvent.ACTION_DOWN == mAction) { // 按下动作
                paint.setColor(Color.BLUE);
            }
            canvas.drawCircle(mX, mY,10, paint);
            setTitle("A = " + mAction + " ["+ mX +","+ mY +"]");
        }
        @Override
        public boolean onTouchEvent(MotionEvent event) {
            mAction = event.getAction(); // 获得动作
            mX = event.getX(); // 获得坐标
            mY = event.getY();
            Log.v(TAG, "Action = "+ mAction );
            Log.v(TAG, "("+mX+","+mY+")");
            invalidate(); // 重新绘制
            return true;
        }
    }
}

        在程序中,在触摸屏事件到来之后,接收到它,并且纪录发生事件的坐标和动作,然后调用 invalidate()重新进行绘制。绘制在 onDraw()中完成,根据不同的事件,绘制不同颜色的点,并设置标题栏。
        MotionEvent 是用于处理运动事件的类,这个类中可以获得动作的类型、动作的坐标,在 Android 2.0 版本之后,MotionEvent 中还包含了多点触摸的信息,当有多个触点同时起作用的时候,可以获得触点的数目和每一个触点的坐标。

5.扩展

        更多详情可通过下方的链接,下载电子书-------《Android Studio开发实战:从零基础到App上线》进行参考研究。

http://code.drjtrtj.xyz/downCode?id=4021

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

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

相关文章

[DS]Polar靶场web(一)

静以养心&#xff0c;宽以养气。 跟着Dream ZHO大神学专升安的一天 swp 直接dirb扫出.index.php.swp的目录 function jiuzhe($xdmtql){return preg_match(/sys.*nb/is,$xdmtql);//如果包含以 "sys" 开始&#xff0c;后跟任意字符直到 "nb" 的字符串&…

[XG] HTTP

我希望风起&#xff0c;而你好像更希望风停。 闲来无事&#xff0c;跟着Z3r4y-CSDN博客大神学一学web吧 [NewStarCTF 2023]Begin of HTTP 1.题目要求使用GET方式来给ctf参数传入任意值&#xff0c;那就传吧。 2.又让以POST方式来传递secert参数&#xff0c;并且要找一下参数…

python--字符串和常见的方法

1.字符串对象 字符串 " 字符串 " """ 字符串 """ 字符串 str() #全局函数&#xff0c;将一个类型转化为字符串 len(字符串) #获取字符串长度 while 和 for 循环&#xff0c;遍历字符串 案例一&#xff1a;查看字…

ubuntu系统下如何使用vscode编译和调试#小白入门#

编程环境&#xff1a;ubuntu系统为18.04.1&#xff0c;vscode版本为1.66.2 一、VSCode切换中文显示&#xff1a; 1、vscode安装完成后启动,在左侧externsions中搜索“简体中文”插件&#xff0c;并完成安装&#xff1a; 2、选择右下角齿轮形状的"Manage"&#xff…

记·汇编语言、C语言分别写并链接

电脑是64位的&#xff0c;汇编语言是AT&T风格。风格不同的汇编语言&#xff0c;汇编时的指令是不同的。在我学习过程中带来了挺多麻烦。 C语言内容。hello.c #include <stdio.h>//声明汇编编写的函数 extern void print_hello();int main() {// 调用汇编函数print_…

蓝桥杯真题Day40 倒计时19天 纯练题!

蓝桥杯第十三届省赛真题-统计子矩阵 题目描述 给定一个 N M 的矩阵 A&#xff0c;请你统计有多少个子矩阵 (最小 1 1&#xff0c;最大 N M) 满足子矩阵中所有数的和不超过给定的整数 K? 输入格式 第一行包含三个整数 N, M 和 K. 之后 N 行每行包含 M 个整数&#xf…

机器学习模型——KNN

KNN的基本概念&#xff1a; KNN(K-Nearest Neighbor)就是k个最近的邻居的意思&#xff0c;即每个样本都可以用它最接近的k个邻居来代表。KNN常用来处理分类问题&#xff0c;但也可以用来处理回归问题。 核心思想是如果一个样本在特征空间中的k个最相邻的样本中的大多数属于某…

好物视频素材哪里找,下面推荐几个好用给大家

想要创作出精彩的好物视频&#xff0c;离不开优质的素材。在这里&#xff0c;我将介绍一些提供免费好物视频素材的网站&#xff0c;让你轻松找到所需素材。 首先&#xff0c;蛙学网&#xff08;https://www.waxuewang.com&#xff09;是一个提供高质量视频素材的网站&#xff…

Redis面试题-缓存雪崩、缓存穿透、缓存击穿问题

1 穿透: 两边都不存在&#xff08;皇帝的新装&#xff09; &#xff08;黑名单&#xff09; &#xff08;布隆过滤器&#xff09; 2 击穿&#xff1a;一个热点的key失效了&#xff0c;这时大量的并发请求直接到达数据库. &#xff08;提前预热&#xff09; 3 雪崩&#xff1a…

好物视频素材库免费下载去哪找?

你是不是在找抖音好物视频素材库免费的网站&#xff0c;可是不知道哪儿能找到&#xff1f;别急&#xff0c;我来给你推荐几个网站&#xff0c;保证让你找到满意的素材&#xff01; 首先&#xff0c;蛙学网&#xff08;https://www.waxuewang.com&#xff09;是一个提供高质量视…

电子价签通信协议解析:蓝牙5.0有何优势?

电子价签是一种新型的零售显示技术&#xff0c;它可以实时更新商品价格、促销信息等内容&#xff0c;为消费者提供更加便捷的购物体验。电子价签的通信协议是决定其性能的关键因素之一&#xff0c;而蓝牙5.0则是目前相对更适合电子价签的通信协议。 电子价签的工作模式 以云…

Notepad++:格式化json字符串(带转义)

目录 一、效果呈现 二、去除json字符串转义 三、格式化json字符串 一、效果呈现 格式化前 带字符串转义&#xff0c;带unicode编码字符 格式化后 二、去除json字符串转义 方法&#xff1a;采用Notepad的普通替换 第一&#xff1a;\"替换为" 第二&#xff1a;\\…

智能算法-遗传算法 学习笔记

适应度的计算可类别为神经网络的目标函数&#xff0c;但此算法属于无监督学习&#xff0c;宏观来讲为搜寻最优解&#xff08;梯度&#xff09;的方式不同&#xff1f; 但神经网络中好像并不存在变异操作&#xff08;参数矩阵突变&#xff09;&#xff1f; 交叉的话残差网络ResN…

第一性原理计算代码可使用1个月有效期,龙讯旷腾PWmat

龙讯旷腾系列产品正在陆续入驻国家超算互联网&#xff08;https://www.scnet.cn&#xff09;&#xff0c;有自己的网上商城了&#xff01;PWmat&#xff08;如果您喜欢命令行&#xff09;以及Q-FlowPWmat组合产品&#xff08;如果您喜欢用可视化工作流提交任务&#xff09;&…

iOS网络抓包工具全解析

摘要 本文将深入探讨iOS平台上常用的网络抓包工具&#xff0c;包括Charles、克魔助手、Thor和Http Catcher&#xff0c;以及通过SSH连接进行抓包的方法。此外&#xff0c;还介绍了克魔开发助手作为iOS应用开发的辅助工具&#xff0c;提供的全方面性能监控和调试功能。 在iOS应…

nodejs中使用WebScoket的简单示例

前言 WebScoket可以用来实现即时通信,一般用于通信聊天工具或者是需要实时接受数据等功能 在浏览器环境中,WebScoket是一个构造函数,需要new创建连接的实例; 在nodejs环境中,则需要使用ws模块来完成服务的创建。 示例 下面是可以直接使用的代码,不需要修改 node创建服务端…

31-3 文件包含漏洞 - 文件包含漏洞利用(CVE-2021-3019:Lanproxy 任意文件读取漏洞复现)

一、Lanproxy简介: lanproxy是一个将局域网个人电脑、服务器代理到公网的内网穿透工具,支持TCP流量转发,可支持任何TCP上层协议(访问内网网站、本地支付接口调试、SSH访问、远程桌面等)。 二、漏洞概述: Lanproxy1.0 版本存在目录遍历漏洞,可通过绕过路径限制(../)来…

手游行业如何做好软文推广?媒介盒子揭秘

随着各方面消费持续复苏&#xff0c;手游行业也在逐渐回暖&#xff0c;为了宣传游戏特色和积累游戏热度&#xff0c;很多运营商都会在各大平台投放软文。然而有许多商家在软文投放时只关注数量 不关注质量&#xff0c;导致软文效果不是很好。今天媒介盒子就来和大家聊聊&#x…

机器学习 | 期望最大化(EM)算法介绍和实现

在现实世界的机器学习应用中&#xff0c;通常有许多相关的特征&#xff0c;但只有其中的一个子集是可观察的。当处理有时可观察而有时不可观察的变量时&#xff0c;确实可以利用该变量可见或可观察的实例&#xff0c;以便学习和预测不可观察的实例。这种方法通常被称为处理缺失…

【C++】手撕哈希表的闭散列和开散列

> 作者&#xff1a;დ旧言~ > 座右铭&#xff1a;松树千年终是朽&#xff0c;槿花一日自为荣。 > 目标&#xff1a;手撕哈希表的闭散列和开散列 > 毒鸡汤&#xff1a;谁不是一边受伤&#xff0c;一边学会坚强。 > 专栏选自&#xff1a;C嘎嘎进阶 > 望小伙伴们…