[Android实例] android多点触摸demo

Android多点触摸测试工具源码深度解析 电阻式触摸屏由两个透明的导电层组成,这两层通常由玻璃或塑料制成,表面涂有一层导电材料,中间以绝缘点分开。当用户触摸屏幕时,两层导电材料接触,形成一个电路,从而能够检测到触摸点的位置。电阻式触摸屏有四个主要组件:顶层的导电层(称为Indium Tin Oxide,即ITO层)、下层的导电层、绝缘层(通常是由细小的隔离柱形成)、以及导电层之间的接触层。这种屏幕的响应取决于触摸压力的大小,因此它们能够支持触控笔输入,但屏幕表面易磨损。触摸屏硬件组件主要包括触摸面板、触摸控制器和连接接口。 阅读详情
MultiTouchActivity
Java代码    收藏代码
  1. package com.zhaokai.multitouch;  
  2. import android.app.Activity;  
  3. import android.os.Bundle;  
  4. import android.view.Window;  
  5. import android.view.WindowManager;  
  6.   
  7. public class MultiTouchActivity extends Activity {  
  8.     /** Called when the activity is first created. */  
  9.      /** Called when the activity is first created. */  
  10.     @Override  
  11.     public void onCreate(Bundle savedInstanceState) {  
  12.       super.onCreate(savedInstanceState);            
  13.       //隐藏标题栏            
  14.       requestWindowFeature(Window.FEATURE_NO_TITLE);            
  15.       //设置成全屏           
  16.       getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);            
  17.       //设置为上面的MTView            
  18.       setContentView(new MySurfaceView(this));    
  19.     }  
  20. }  


SurfaceView类: 

Java代码    收藏代码
  1. package com.zhaokai.multitouch;  
  2.   
  3. import android.content.Context;  
  4. import android.graphics.Canvas;  
  5. import android.graphics.Color;  
  6. import android.graphics.Paint;  
  7. import android.view.MotionEvent;  
  8. import android.view.SurfaceHolder;  
  9. import android.view.SurfaceHolder.Callback;  
  10. import android.view.SurfaceView;  
  11. public class MySurfaceView extends SurfaceView implements Callback{  
  12. private static final int MAX_TOUCHPOINTS = 10;  
  13. private static final String START_TEXT = "请随便触摸屏幕进行测试";        
  14. private Paint textPaint = new Paint();        
  15. private Paint touchPaints[] = new Paint[MAX_TOUCHPOINTS];        
  16. private int colors[] = new int[MAX_TOUCHPOINTS];           
  17. private int width, height;        
  18. private float scale = 1.0f;  
  19.   
  20. public MySurfaceView(Context context) {  
  21.   super(context);  
  22.   SurfaceHolder holder = getHolder();            
  23.   holder.addCallback(this);            
  24.   setFocusable(true); // 确保我们的View能获得输入焦点            
  25.   setFocusableInTouchMode(true); // 确保能接收到触屏事件            
  26.   init();    
  27. }  
  28. public void init(){  
  29.   // 初始化10个不同颜色的画笔            
  30.   textPaint.setColor(Color.WHITE);    
  31.   colors[0] = Color.BLUE;    
  32.   colors[1] = Color.RED;  
  33.   colors[2] = Color.GREEN;  
  34.   colors[3] = Color.YELLOW;  
  35.   colors[4] = Color.CYAN;  
  36.   colors[5] = Color.MAGENTA;  
  37.   colors[6] = Color.DKGRAY;  
  38.   colors[7] = Color.WHITE;  
  39.   colors[8] = Color.LTGRAY;  
  40.   colors[9] = Color.GRAY;  
  41.   for(int i=0;i<MAX_TOUCHPOINTS;i++){  
  42.    touchPaints[i]=new Paint();  
  43.    touchPaints[i].setColor(colors[i]);  
  44.   }  
  45. }  
  46.   
  47. @Override  
  48. public boolean onTouchEvent(MotionEvent event) {  
  49.   int pointerCount=event.getPointerCount();  
  50.   if(pointerCount>MAX_TOUCHPOINTS){  
  51.    pointerCount=MAX_TOUCHPOINTS;  
  52.   }  
  53.   Canvas c=getHolder().lockCanvas();  
  54.   if(c!=null){  
  55.    c.drawColor(Color.BLACK);  
  56.    if(event.getAction()==MotionEvent.ACTION_UP){  
  57.     // 当手离开屏幕时,清屏  
  58.     c.drawColor(Color.BLACK);  
  59.    }else{  
  60.      // 先在屏幕上画一个十字,然后画一个圆  
  61.     for(int i=0;i<pointerCount;i++){  
  62.      //获取一个触点的坐标,然后开始绘制  
  63.      int id=event.getPointerId(i);  
  64.      int x=(int)event.getX(i);  
  65.      int y=(int)event.getY(i);  
  66.      drawCrosshairsAndText(x, y, touchPaints[id], i, id, c);  
  67.     }  
  68.     for(int i=0;i<pointerCount;i++){  
  69.      int id=event.getPointerId(i);  
  70.      int x=(int)event.getX(i);  
  71.      int y=(int)event.getY(i);  
  72.      drawCircle(x, y, touchPaints[id],c);  
  73.     }  
  74.    }  
  75.    getHolder().unlockCanvasAndPost(c);  
  76.   }  
  77.   return true;  
  78. }  
  79.   
  80. private void drawCrosshairsAndText(int x, int y, Paint paint, int ptr,int id, Canvas c) {  
  81.   c.drawLine(0, y, width, y, paint);            
  82.   c.drawLine(x, 0, x, height, paint);            
  83.   int textY = (int) ((15 + 20 * ptr) * scale);            
  84.   c.drawText("x" + ptr + "=" + x, 10 * scale, textY, textPaint);            
  85.   c.drawText("y" + ptr + "=" + y, 70 * scale, textY, textPaint);            
  86.   c.drawText("id" + ptr + "=" + id, width - 55 * scale, textY, textPaint);     
  87. }    
  88.   
  89. private void drawCircle(int x, int y, Paint paint, Canvas c) {  
  90.   c.drawCircle(x, y, 40 * scale, paint);        
  91. }    
  92.   
  93. @Override  
  94. public void surfaceChanged(SurfaceHolder holder, int format, int width,  
  95.    int height) {  
  96.    this.width = width;            
  97.    this.height = height;            
  98.    if (width > height){                
  99.     this.scale = width / 480f;            
  100.    } else {  
  101.    this.scale = height / 480f;            
  102.    }            
  103.    textPaint.setTextSize(14 * scale);            
  104.    Canvas c = getHolder().lockCanvas();            
  105.    if (c != null) {              // 背景黑色                
  106.     c.drawColor(Color.BLACK);                
  107.     float tWidth = textPaint.measureText(START_TEXT);                
  108.     c.drawText(START_TEXT, width / 2 - tWidth / 2, height / 2,textPaint);                
  109.     getHolder().unlockCanvasAndPost(c);            
  110.   }    
  111. }  
  112. @Override  
  113. public void surfaceCreated(SurfaceHolder holder) {  
  114.   // TODO Auto-generated method stub  
  115.     
  116. }  
  117. @Override  
  118. public void surfaceDestroyed(SurfaceHolder holder) {  
  119.   // TODO Auto-generated method stub  
  120.     
  121. }   
  122.   
  123. }  
android触摸屏测试程序 android触摸屏测试程序,android市场上都有下的 立即下载

相关推荐

android触摸屏测试程序demo

android触摸屏测试程序demo

android 多点触控

如何判断android是否支持多点触摸: 可以通过两种方式判断: 1. 通过JAVA的反射原理,关数类MotionEvent是否包含方法多点触摸的方法 支持多点触摸的方法getPointerCount,getPointerId是后来加上去的,如果类没有这两个方法,说明手机不支持多点触摸 boolean multiTouchAvailable1 = false;

YiRong 1021

android测试Touch事件DEMO

android测试Touch事件DEMO

Android 自定义View 处理多点触控,实现双指支持同时缩放平移

Android 多点触控,实现类似地图效果,同时支持缩放平移

WeiPR的博客 4279

安卓屏幕测试工具软件

安卓端的屏幕测试工具,支持纯色、色阶等测试,支持Android 4.4系统,支持1024*600的分辨率。

【Android每周专题】触摸屏事件实验代码

因为本周打算写两篇博客,下一篇会写手势相关的,所以工程的名称是GestureDemo,大家不要见怪。

[Android实例] android多点触摸demo .

MultiTouchActivity Java代码   package com.zhaokai.multitouch;   import android.app.Activity;   import android.os.Bundle;   im

Dream It Possible 1293

android 屏幕CIT测试程序

android 屏幕CIT测试程序android 屏幕CIT测试程序

Android 多点触摸 multi-touch

多点触摸multi-touch<br /> 最近研究多点触摸,做了个demo。Demo中实现多点触摸缩放和使用按钮点击放大和缩小。注意2.0以上才支持多点触摸。 <br /><br /> 程序代码如下: <br /> package org.example.touch; <br />

fhy_2008的专栏 6665

Android触屏测试实例代码

主要介绍了Android触屏测试实例代码,可实现对一些常用事件的响应及处理,对Android初学者有很好的借鉴价值,需要的朋友可以参考下

顺序功能图基本结构

顺序功能图(Sequential Function Chart,SFC)是一种用于描述工业控制系统中顺序控制流程的图形化编程语言,广泛应用于PLC(可编程逻辑控制器)编程。其核心思想是将复杂的控制流程分解为多个有序的步骤,通过逻辑条件实现步骤间的切换。顺序功能图通过图形化的方式简化了复杂控制逻辑的设计,尤其适用于需要严格顺序控制的工业自动化场景。[初始步] → 转换条件1 → [步1] → 转换条件2 → [步2] → ...[步X] → → [步B] → 转换条件B → → [合并步]

ayingqin1的博客 1224

Android多点触摸操作

Android中的多点触摸可以实现图片的放大、缩小和旋转等处理 主要通过setOnTouchListener方法来监听用户的触摸事件,通过event.getX(0)和 event.getX(1)来获取第一个触控点和第二个触控点的x轴(或者y轴)坐标, 接下来在MotionEvent.ACTION_DOWN、MotionEvent.ACTION_MOVE、MotionEvent.ACTION_U

GEM_yaorao的博客 775

(三)从零开始学习模糊控制——模糊决策

模糊控制之基础——模糊数学 (一)模糊数学——基本概念 (二)模糊数学——模糊关系 (三)模糊数学——模糊决策 文章目录模糊控制之基础——模糊数学前言一、模糊决策法1.最大值原理2.模糊排序2.模糊寻优总结 前言   模糊决策是指在模糊环境下进行决策的数学理论和方法。这类问题─般具有大系统特征,系统之间的关系十分复杂,存在不能准确赋值的变量,这些变量属于模糊因素,涉及到一定的主观因素,使得子系统之间、变量之间的关系不清晰,从而必须借助排序、模糊评判等方法来进行处理。 一、模糊决策

qq_43667552的博客 4750

android多点触摸demo

MultiTouchActivity Java代码   package com.zhaokai.multitouch;   import android.app.Activity;   import android.os.Bundle;   import android.view.Window;   import android.view.WindowManag

it_guang的博客 335

算法竞赛入门到进阶 --- 完整学习路线(含知识点讲解)

前言: 咳咳,接触算法竞赛也有一年了,却从来都没有进行过一次系统的学习,稀里糊涂的就这么搞了半年,如今,我决定认认真真的进行一次系统的复盘。嗯嗯,先把大体路线列出来,然后往后每天搞几篇,可能大三能完成,可能永远也不能写完这些,我只能慢慢来,一起共勉吧。冲了!(主要是太菜了,不系统学习下,怕是铜牌都拿不到呀!) 算法竞赛入门到进阶一、sort函数自定义排序二、c++容器的使用1.vector动态数组2.stack栈3.queue队列4.list链表5.set集合6.map映射三、二进制子集生成四、bfs.

qq_43514659的博客 2万+

UE4/5项目GPU崩溃?可能是Windows的TDR机制在搞鬼!深入浅出聊聊TdrDelay与显卡超时

本文深入探讨了UE4/5项目中GPU崩溃的常见原因,揭示了Windows TDR机制的工作原理及其对渲染进程的影响。通过调整TdrDelay参数和优化GPU负载,提供了解决显卡超时问题的实用方案,帮助开发者提升项目稳定性。

weixin_30691649的博客 409

android实现自动触摸,Android编程开发之多点触摸(Multitouch)实现方法

本文实例讲述了Android编程开发之多点触摸(Multitouch)实现方法。分享给大家供大家参考,具体如下:如果您对开发多点触摸程序感兴趣的话,那么本文将是一个很好的开始,android应用程序开发中,多点触摸不是那么遥不可及,实现起来也很简单,本例只需要两个类就能实现多点触摸。首先来看看我们的视图类MTView.java:package com.ideasandroid.demo;impor...

weixin_35645077的博客 987

激光雷达接收芯片选型指南:APD、SiPM、SPAD阵列的优缺点对比

本文深入对比了激光雷达接收芯片APD、SiPM和SPAD阵列的核心技术原理与性能差异。APD作为线性模式工作的稳健选择,动态范围大;SiPM具备单光子探测和高增益优势;而SPAD阵列凭借像素级数字读出和集成TDC,在时间分辨率与系统集成度上领先。文章从灵敏度、时间精度、动态范围及系统成本等多维度剖析,为不同应用场景(如车载雷达、Flash LiDAR、消费电子)的芯片选型提供实战指南。

ik6789012的博客 655

android支持多点触摸的补丁

android支持多点触摸的补丁以及demo文件:MultiTouchDemo.zip大小:2633KB下载:下载修改文件frameworks/base/services/java/com/android/server/KeyInputQueue.java为如下内容/* *

linux嵌入式驱动软件开发 2156

GEE:关于遥感生态指数(RSEI)的若干疑问

本文记录了若干关于在 Google Earth Engine (GEE)平台上,计算基于主成分分析(PCA)的遥感生态指数(RSEI)的问题。并记录了解决这些问题的一些答案。问题包括,主成分分析的特征值的正负,主成分的占比,去云后空值像素的处理方法,异常值处理方法,如何看载荷等。

养乐多的博客 3417

【深度学习新浪潮】智能体在图像处理领域的技术突破与实践指南

智能体正在重构图像处理的技术版图:从多智能体分工的"专业化协作",到多模态统一的"极简架构",再到工具增强的"实战能力",技术突破不断降低开发门槛并拓展应用边界。对于开发者而言,2025年的核心机遇在于结合具体场景选择成熟框架(如医疗用IteR-MRL、工业用NVIDIA NIM),通过微调与工具集成快速落地解决方案。随着硬件成本下降与开源生态完善,图像处理智能体将从当前的"高端场景赋能"走向"千行百业普及",真正成为数字世界的"视觉感知与操作核心"。

专注:太空算力、AI infra、异构调度、大模型成本工程 439

21、多点触摸技术

什么是多点触摸技术 多点触摸是一项很早就使用的技术,从IPhone第一代就支持多点触摸。要想了解什么叫多点触摸,首先应了解什么是单点触摸。早期的触摸屏无论有多少个手指接触到屏幕,系统只会认为第1个接触到屏幕的手指是有效的,后来接触到屏幕的手指将被忽略。这就是所谓单点触摸,单点就是指第1个接触到屏幕的手指。 了解了单点触摸,多点触摸就很容易理解了。所谓多点...

dianwei5413的博客 150

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

上一篇: EditText输入事件截获与监听
下一篇: android图片的缩放
com360
博客等级 码龄16年 225粉丝 137原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值