热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

Android开发实例之多点触控程序

本文主要介绍Android开发多点触控,这里提供了详细的资料和示例代码,以及实现效果图,有开发Android应用需要这样的功能的小伙伴可以参考下

       智能终端设备的多点触控操作为我们带来了种种炫酷体验,这也使得很多Android开发者都对多点触控程序的开发感兴趣。实际上多点触控程序的实现并不是那么遥不可及,而是比较容易。本文就主要通过一个实例具体讲解多点触控程序的实现。

       首先来了解一下Android中多点触控的原理。

       Android多点触控在本质上需要LCD驱动和程序本身设计上支持,目前市面上HTC、Motorola和Samsung等知名厂商只要使用电容屏触控原理的手机均可以支持多点触控Multitouch技术,对于网页缩放、手势操作上有更好的用户体验。 在Android平台上事件均使用了MotionEvent对象方式处理,比如开始触控时会触发ACTION_DOWN,而移动操作时为ACTION_MOVE,最终放开手指时触发ACTION_UP事件。当然还有用户无规则的操作可能触发ACTION_CANCEL这个动作。

       对于常规的触控操作我们都是使用内部为View的setOnTouchListener()接口实现的onTouchEvent()方法来处理。因此对于onTouchEvent方法的参数MotionEvent我们需要有一定得了解,比如:

Java代码

event.getAction() //获取触控动作比如ACTION_DOWN  
event.getPointerCount(); //获取触控点的数量,比如2则可能是两个手指同时按压屏幕  
event.getPointerId(nID); //对于每个触控的点的细节,我们可以通过一个循环执行getPointerId方法获取索引  
event.getX(nID); //获取第nID个触控点的x位置  
event.getY(nID); //获取第nID个点触控的y位置  
event.getPressure(nID); //LCD可以感应出用户的手指压力,当然具体的级别由驱动和物理硬件决定的  
event.getDownTime() //按下开始时间  
event.getEventTime() // 事件结束时间  
event.getEventTime()-event.getDownTime()); //总共按下时花费时间 

      下面,我们根据一个项目来讲解如何实现多点触控。

      在上代码之前先来看看此实例的运行效果图:

       以下是实现步骤:

       1、创建一个Android项目,命名为MultitouchVisible。

       2、在该项目内,新建一个view,继承SurfaceView,并实现了Callback接口,这里我们命名该类为MyView.java,下面是该类地具体实现代码:

Java代码

public class MyView extends SurfaceView implements SurfaceHolder.Callback{  
  MultitouchVisible father;  
    
  private static final int MAX_TOUCHPOINTS = 10;   
  private static final String START_TEXT = "请随便触摸屏幕进行测试";   
  private Paint textPaint = new Paint();   
  private Paint touchPaints[] = new Paint[MAX_TOUCHPOINTS];   
  private int colors[] = new int[MAX_TOUCHPOINTS];   
  private int width, height;   
// private float scale = 1.0f;   
    
  public MyView(MultitouchVisible father) {  
    super(father);  
    // TODO Auto-generated constructor stub  
    this.father=father;  
    SurfaceHolder holder = getHolder();   
    holder.addCallback(this);   
    setFocusable(true); // 确保我们的View能获得输入焦点   
    setFocusableInTouchMode(true); // 确保能接收到触屏事件   
    init();   
  }  
   private void init() {   
     // 初始化10个不同颜色的画笔   
     textPaint.setColor(Color.WHITE);   
     colors[0] = Color.BLUE;   
     colors[1] = Color.RED;   
     colors[2] = Color.GREEN;   
     colors[3] = Color.YELLOW;   
     colors[4] = Color.CYAN;   
     colors[5] = Color.MAGENTA;   
     colors[6] = Color.DKGRAY;   
     colors[7] = Color.WHITE;   
     colors[8] = Color.LTGRAY;   
     colors[9] = Color.GRAY;   
     for (int i = 0; i  MAX_TOUCHPOINTS) {   
       pointerCount = MAX_TOUCHPOINTS;   
       }   
     // 锁定Canvas,开始进行相应的界面处理   
     Canvas c = getHolder().lockCanvas();   
    if (c != null) {   
      c.drawColor(Color.BLACK);   
      if (event.getAction() == MotionEvent.ACTION_UP) {   
         // 当手离开屏幕时,清屏   
         }  
      else {   
         // 先在屏幕上画一个十字,然后画一个圆   
         for (int i = 0; i 
public class MultitouchVisible extends Activity {  
  /** Called when the activity is first created. */ 
  @Override 
  public void onCreate(Bundle savedInstanceState) {  
    super.onCreate(savedInstanceState);  
    //隐藏标题栏   
    requestWindowFeature(Window.FEATURE_NO_TITLE);   
    //设置成全屏   
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,   
    WindowManager.LayoutParams.FLAG_FULLSCREEN);   
    //设置为上面的MTView   
    setContentView(new MyView(this));   
  }  
} 

       4、到此,项目已经完成,可见多点触控实现起来并不难!运行此实例程序就能得到如上面效果图中的界面。

        以上就是对Android多点触控的资料整理,后续继续整理相关资料,谢谢大家对本站的支持。


推荐阅读
  • Java学习笔记之使用反射+泛型构建通用DAO
    本文介绍了使用反射和泛型构建通用DAO的方法,通过减少代码冗余度来提高开发效率。通过示例说明了如何使用反射和泛型来实现对不同表的相同操作,从而避免重复编写相似的代码。该方法可以在Java学习中起到较大的帮助作用。 ... [详细]
  • 原理:dismiss再弹出,把dialog设为全局对象。if(dialog!null&&dialog.isShowing()&&!(Activity.)isFinishing()) ... [详细]
  • 本文详细介绍了在Centos7上部署安装zabbix5.0的步骤和注意事项,包括准备工作、获取所需的yum源、关闭防火墙和SELINUX等。提供了一步一步的操作指南,帮助读者顺利完成安装过程。 ... [详细]
  • 本文介绍了使用SSH免密登录的步骤,包括生成公私钥、传递公钥给被登录机、修改文件权限的操作。同时提醒用户注意私钥的传递方式,建议使用U盘等离线方式传递。 ... [详细]
  • SpringBoot整合SpringSecurity+JWT实现单点登录
    SpringBoot整合SpringSecurity+JWT实现单点登录,Go语言社区,Golang程序员人脉社 ... [详细]
  • LVS实现负载均衡的原理LVS负载均衡负载均衡集群是LoadBalance集群。是一种将网络上的访问流量分布于各个节点,以降低服务器压力,更好的向客户端 ... [详细]
  • GSIOpenSSH PAM_USER 安全绕过漏洞
    漏洞名称:GSI-OpenSSHPAM_USER安全绕过漏洞CNNVD编号:CNNVD-201304-097发布时间:2013-04-09 ... [详细]
  • 本文介绍了在RHEL 7中的系统日志管理和网络管理。系统日志管理包括rsyslog和systemd-journal两种日志服务,分别介绍了它们的特点、配置文件和日志查询方式。网络管理主要介绍了使用nmcli命令查看和配置网络接口的方法,包括查看网卡信息、添加、修改和删除配置文件等操作。 ... [详细]
  • Python脚本编写创建输出数据库并添加模型和场数据的方法
    本文介绍了使用Python脚本编写创建输出数据库并添加模型数据和场数据的方法。首先导入相应模块,然后创建输出数据库并添加材料属性、截面、部件实例、分析步和帧、节点和单元等对象。接着向输出数据库中添加场数据和历程数据,本例中只添加了节点位移。最后保存数据库文件并关闭文件。文章还提供了部分代码和Abaqus操作步骤。另外,作者还建立了关于Abaqus的学习交流群,欢迎加入并提问。 ... [详细]
  •     这里使用自己编译的hadoop-2.7.0版本部署在windows上,记得几年前,部署hadoop需要借助于cygwin,还需要开启ssh服务,最近发现,原来不需要借助cy ... [详细]
  • 大坑|左上角_pycharm连接服务器同步写代码(图文详细过程)
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了pycharm连接服务器同步写代码(图文详细过程)相关的知识,希望对你有一定的参考价值。pycharm连接服务 ... [详细]
  • Hadoop2.6.0 + 云centos +伪分布式只谈部署
    3.0.3玩不好,现将2.6.0tar.gz上传到usr,chmod-Rhadoop:hadophadoop-2.6.0,rm掉3.0.32.在etcp ... [详细]
  • linux 禁止指定ip访问
    linux中如何禁止指定的ip访问呢?比如被别人暴力破解,被别人使用不同的密码尝试登录:所以我想直接禁用这些ip的访问.怎么办呢?解决方案:修改配置文件etchosts.deny把 ... [详细]
  • 一、修改注册表去掉桌面图标小箭头1按下win+R组合快捷键,打开windows10系统的“运行”窗口,输入“regedit”,打开注册表编辑器,找到HKEY_CLASSES_ROOT\lnkfi ... [详细]
  • Django + Ansible 主机管理(有源码)
    本文给大家介绍如何利用DjangoAnsible进行Web项目管理。Django介绍一个可以使Web开发工作愉快并且高效的Web开发框架,能够以最小的代价构建和维护高 ... [详细]
author-avatar
手机用户2502911805
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有