Android检测手机多点触摸点数的方法
作者:XHui_Lin 发布时间:2023-03-10 11:08:35
标签:Android,触摸
本文实例为大家分享了Android检测手机多点触摸点数的具体代码,供大家参考,具体内容如下
多点触摸点数效果图
Circle.java
package com.zking.administrator.g160628_android19_pointstouch;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import java.util.Random;
/**
* Created by Administrator on 2017/7/9.
*/
public class Circle {
public float x;
public float y;
public int r=100;//半径
public int id;//手指的名字
//三原色(每一个int类型的取值都是255)
int red;
int green;
int blue;
//随机数
Random random=new Random();
public Circle(float x, float y, int id) {
this.x = x;
this.y = y;
this.id = id;
red=random.nextInt(255);
green=random.nextInt(255);
blue=random.nextInt(255);
}
//画自己
public void drawSelf(Canvas canvas, Paint paint){
//设置颜色随机
paint.setColor(Color.rgb(red,green,blue));
canvas.drawCircle(x,y,r,paint);
}
}
MainActivity.java
package com.zking.administrator.g160628_android19_pointstouch;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(new MyView(this));
}
}
MyView.java
package com.zking.administrator.g160628_android19_pointstouch;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.support.annotation.Nullable;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import java.util.ArrayList;
import java.util.List;
/**
* Created by Administrator on 2017/7/9.
*/
public class MyView extends View{
//全局变量(单点触摸)
// private float x;
// private float y;
// private int r=100;
//定义圆的集合
List<Circle> circles=new ArrayList<>();
public MyView(Context context) {
super(context);
}
public MyView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
}
public MyView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
public MyView(Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
//画笔
Paint paint=new Paint();
//画圆(单点触摸)
// canvas.drawCircle(x,y,r,paint);
for (Circle circle : circles) {
//把画布和画笔传进去(运行第一次进入什么都没有,所有默认的圆也就没了)
circle.drawSelf(canvas,paint);
}
}
@Override
public boolean onTouchEvent(MotionEvent event) {
//获取手指的行为
int action=event.getAction();
int action_code=action&0xff;
//手指的下标Index
int pointIndex=action>>8;//右移8
//获取手指的坐标
float x=event.getX(pointIndex);
float y=event.getY(pointIndex);
//获取手指的名字(id)
int id=event.getPointerId(pointIndex);
if(action_code>=5){
action_code-=5;
}
switch (action_code){//action_code单点触摸是012,多点触摸562
//case 5://多点触摸的按下时5
case MotionEvent.ACTION_DOWN://0按下
//实例化圆
Circle circle=new Circle(x,y,id);
//将圆添加到集合中
circles.add(circle);
break;
case MotionEvent.ACTION_UP://1抬起
//调用拿圆的方法(拿到是哪个圆我集合就移除,然后重新绘制)
circles.remove(get(id));
break;
case MotionEvent.ACTION_MOVE://2移动
//拿到所有手指的数量(循环所有的圆拿到他的ID,然后用现在的圆,给每一个圆的xy重新赋值)
for (int i = 0; i <event.getPointerCount() ; i++) {
//根据下标拿到ID
int did=event.getPointerId(i);
//根据ID拿到新的圆(i就是当前手指的下标,因为我们是根据下标去拿xy)
get(did).x=event.getX(i);
get(did).y=event.getY(i);
}
break;
}
//重新调用onDraw 重绘 在主线程调用
invalidate();
return true;
}
//这个方法的目的就是拿圆
public Circle get(int id){
for (Circle circle : circles) {
//判断(拿到每一个圆的id等等于你传过来的ID,如果是你想要得圆就return过去)
if(circle.id==id){
return circle;
}
}
return null;
}
}
来源:https://blog.csdn.net/XHui_Lin/article/details/74900697


猜你喜欢
- 1.使用usb口输入的扫描枪,这里实现使用了winform首先创建一个CS文件using System;using System.Colle
- 默认3条以上转为彩信改为5条路径vendor/mediatek/proprietary/packages/apps/Mms/src/com/
- SpringCloud简介Spring cloud是一个基于Spring Boot实现的服务治理工具包,在微服务架构中用于管理和协调服务的微
- 上一篇 主要介绍了如何通过蓝牙连接到打印机。这一篇,我们就介绍如何向打印机发送打印指令,来打印字符和图片。1. 构造输出流首先要明确一点,就
- 一、LockSupport类的属性private static final sun.misc.Unsafe UNSAFE; &
- 目录多开理论基础多开实现原理解析代码实现:多开包名代码实现:多用户总结多开理论基础app多开常用于做一些不合法的事情,如高羊毛,黑灰产,甚至
- 为什么使用logback记得前几年工作的时候,公司使用的日志框架还是log4j,大约从16年中到现在,不管是我参与的别人已经搭建好的项目还是
- 本文实例讲述了C#邮件定时群发工具Atilia用法。分享给大家供大家参考。具体如下:一、Atilia可以做什么Atilia是一个基于命令行的
- 最近开发项目中,有个在屏幕上任意拖动的悬浮窗功能,其实就是利用 WindowManager的api来完成这个需求,具体的实现的功能如下:1.
- 思路要求ScrollView 嵌套 地址栏 和 WebView手指滑屏向下滚动(网页向上),如果网页有滚动条,首先把 地址栏 滚动到消失,然
- 网上教程7.0大多数配置是这样compile ‘com.jakewharton:butterknife:7.0.1' ,不知道他们用
- 对于很多开发人员来说,炫酷的UI效果是最吸引他们注意力的,很多人也因为这些炫酷的效果而去学习一些比较知名的UI库。而做出炫酷效果的前提是你必
- 一、需求C# 项目生成 dll,在反编译工具下,好比皇帝的新装,dll 内部的代码看的一清二楚,在这里推荐一个工具ConfuserEx,可以
- 在winform里拖入一个datagridview控件,跟一个openfiledialog控件using System;using Syst
- 同步代码块基本语句synchronized (任意对象) {操作共享代码}代码示例public class SellTicket imple
- 最近回顾了一下java继承中的问题,下面贴代码:public class Base {protected String temp = &qu
- 本文实例为大家分享了Android自定义星星可滑动评分控件的具体方法,供大家参考,具体内容如下此控件通过线性布局结合ImageView来实现
- 前言笔者因为项目需要自定义相机,所以了解了一下 Android 关于 camera 这块的 API。Android SDK 21(LOLLI
- java沙箱环境测试支付宝支付接口?准备工作,登陆支付宝开放平台,进入沙箱环境开放平台链接:https://developers.alipa
- Android多点触控涉及到的知识点1、ScaleGestureDetector 2、OnScaleGestureListener 3、Ma