Android编程开发之多点触摸(Multitouch)实现方法
程序员文章站
2024-03-07 17:12:39
本文实例讲述了android编程开发之多点触摸(multitouch)实现方法。分享给大家供大家参考,具体如下:
如果您对开发多点触摸程序感兴趣的话,那么本文将是一个很好...
本文实例讲述了android编程开发之多点触摸(multitouch)实现方法。分享给大家供大家参考,具体如下:
如果您对开发多点触摸程序感兴趣的话,那么本文将是一个很好的开始,android应用程序开发中,多点触摸不是那么遥不可及,实现起来也很简单,本例只需要两个类就能实现多点触摸。
首先来看看我们的视图类mtview.java:
package com.ideasandroid.demo; import android.content.context; import android.graphics.canvas; import android.graphics.color; import android.graphics.paint; import android.view.motionevent; import android.view.surfaceholder; import android.view.surfaceview; public class mtview extends surfaceview implements surfaceholder.callback { 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 mtview(context context) { super(context); 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; i++) { touchpaints[i] = new paint(); touchpaints[i].setcolor(colors[i]); } } /* * 处理触屏事件 */ @override public boolean ontouchevent(motionevent event) { // 获得屏幕触点数量 int pointercount = event.getpointercount(); if (pointercount > 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 < pointercount; i++) { // 获取一个触点的坐标,然后开始绘制 int id = event.getpointerid(i); int x = (int) event.getx(i); int y = (int) event.gety(i); drawcrosshairsandtext(x, y, touchpaints[id], i, id, c); } for (int i = 0; i < pointercount; i++) { int id = event.getpointerid(i); int x = (int) event.getx(i); int y = (int) event.gety(i); drawcircle(x, y, touchpaints[id], c); } } // 画完后,unlock getholder().unlockcanvasandpost(c); } return true; } /** * 画十字及坐标信息 * * @param x * @param y * @param paint * @param ptr * @param id * @param c */ private void drawcrosshairsandtext(int x, int y, paint paint, int ptr, int id, canvas c) { c.drawline(0, y, width, y, paint); c.drawline(x, 0, x, height, paint); int texty = (int) ((15 + 20 * ptr) * scale); c.drawtext("x" + ptr + "=" + x, 10 * scale, texty, textpaint); c.drawtext("y" + ptr + "=" + y, 70 * scale, texty, textpaint); c.drawtext("id" + ptr + "=" + id, width - 55 * scale, texty, textpaint); } /** * 画圆 * * @param x * @param y * @param paint * @param c */ private void drawcircle(int x, int y, paint paint, canvas c) { c.drawcircle(x, y, 40 * scale, paint); } /* * 进入程序时背景画成黑色,然后把“start_text”写到屏幕 */ public void surfacechanged(surfaceholder holder, int format, int width, int height) { this.width = width; this.height = height; if (width > height) { this.scale = width / 480f; } else { this.scale = height / 480f; } textpaint.settextsize(14 * scale); canvas c = getholder().lockcanvas(); if (c != null) { // 背景黑色 c.drawcolor(color.black); float twidth = textpaint.measuretext(start_text); c.drawtext(start_text, width / 2 - twidth / 2, height / 2, textpaint); getholder().unlockcanvasandpost(c); } } public void surfacecreated(surfaceholder holder) { } public void surfacedestroyed(surfaceholder holder) { } }
代码中都做了相应的注释,这里就不多说。
接下来看看我们的activity,multitouchvisible.java
package com.ideasandroid.demo; import android.app.activity; import android.os.bundle; import android.view.window; import android.view.windowmanager; public class multitouchvisible extends activity { @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 mtview(this)); } }
更多关于android相关内容感兴趣的读者可查看本站专题:《android开发入门与进阶教程》、《android编程之activity操作技巧总结》、《android视图view技巧总结》、《android操作sqlite数据库技巧总结》、《android操作json格式数据技巧总结》、《android数据库操作技巧总结》、《android文件操作技巧汇总》、《android编程开发之sd卡操作方法汇总》、《android资源操作技巧汇总》及《android控件用法总结》
希望本文所述对大家android程序设计有所帮助。
上一篇: SQL通用存储过程分页,支持多表联合
推荐阅读
-
Android编程开发之多点触摸(Multitouch)实现方法
-
Android开发进阶自定义控件之滑动开关实现方法【附demo源码下载】
-
简单讲解Android开发中触摸和点击事件的相关编程方法
-
Android编程开发之多点触摸(Multitouch)实现方法
-
Android开发进阶自定义控件之滑动开关实现方法【附demo源码下载】
-
Android开发之微信底部菜单栏实现的几种方法汇总
-
Android开发之微信底部菜单栏实现的几种方法汇总
-
Android开发之创建可点击的Button实现方法
-
Android开发之创建可点击的Button实现方法
-
Android应用开发中触摸屏手势识别的实现方法解析