MultiTouchActivity
package com.zhaokai.multitouch;
import android.app.Activity;
import android.os.Bundle;
import android.view.Window;
import android.view.WindowManager;
public class MultiTouchActivity extends Activity {
/** Called when the activity is first created. */
/** 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 MySurfaceView(this));
}
}
SurfaceView类:
package com.zhaokai.multitouch;
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.SurfaceHolder.Callback;
import android.view.SurfaceView;
public class MySurfaceView extends SurfaceView implements 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 MySurfaceView(Context context) {
super(context);
SurfaceHolder holder = getHolder();
holder.addCallback(this);
setFocusable(true); // 确保我们的View能获得输入焦点
setFocusableInTouchMode(true); // 确保能接收到触屏事件
init();
}
public 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 c=getHolder().lockCanvas();
if(c!=null){
c.drawColor(Color.BLACK);
if(event.getAction()==MotionEvent.ACTION_UP){
// 当手离开屏幕时,清屏
c.drawColor(Color.BLACK);
}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);
}
}
getHolder().unlockCanvasAndPost(c);
}
return true;
}
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);
}
private void drawCircle(int x, int y, Paint paint, Canvas c) {
c.drawCircle(x, y, 40 * scale, paint);
}
@Override
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);
}
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
// TODO Auto-generated method stub
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
// TODO Auto-generated method stub
}
}
分享到:
相关推荐
这是一个Android 多点触摸的实例源码
NULL 博文链接:https://lynen.iteye.com/blog/1117108
因此本文提出了基于Android平台的多点触摸遥控系统开发设计方案,该方案基于 Hi3716H 处理器硬件平台和 Android2.3 版本软件平台。首先,深入分析了Android系统软件框架和应用程序结构。其次,系统通过智能电视USB驱动...
主要介绍了Android编程开发之多点触摸(Multitouch)实现方法,结合实例形式详细分析了Android多点触摸的相关实现步骤与操作技巧,需要的朋友可以参考下
安卓Android源码——多点触控实例源码.zip
本文就主要通过一个实例具体讲解多点触控程序的实现。 首先来了解一下Android中多点触控的原理。 Android多点触控在本质上需要LCD驱动和程序本身设计上支持,目前市面上HTC、Motorola和Samsung等知名厂商只要...
FreeformGestureDetector:raised_hand:适用于Android的多点触摸变换手势检测器。 样本样本回购示例用法FreeformGestureDetector类的行为类似于常规手势检测器。 它接收流FreeformGestureDetector:raised_hand:...
单点触摸实例:父节点中的某个子节点随手指移动; 多点触摸实例:缩放功能的实现。 参考《Cocos2D-X权威指南》一书。
android 串口测试demo 代码简单 无bug 完美运行 android 串口测试demo 代码简单 无bug 完美运行 android 串口测试demo 代码简单 无bug 完美运行 android 串口测试demo 代码简单 无bug 完美运行 android 串口测试demo...
Windows7的关于多点触摸到例子,Windows Touch 笔势、Windows Touch 操作示例 (MTManipulation)、Windows Touch 便笺簿示例 (MTScratchpadWMTouch)实例
Android 多点触控实例。 多点触控图像,根据手势随意放大/缩小图像。
Android各类Demo项目
Android程序研发源码Android 多点触控实例源码
《android实例开发完全手册》demo实例源码
android[Android实例] Android 竖着的SeekBar[Android实例] Android 竖着的SeekBar[Android实例] Android 竖着的SeekBar[Android实例] Android 竖着的SeekBar[Android实例] Android 竖着的SeekBar[Android实例] ...
android[Android实例] 面试题集[Android实例] 面试题集[Android实例] 面试题集[Android实例] 面试题集[Android实例] 面试题集[Android实例] 面试题集[Android实例] 面试题集[Android实例] 面试题集[Android实例] ...
图片的拖拉功能是处理图片进一个有用且常用的功能,由于手机屏幕尺寸的限制,往往无法在手机上一次性的显示一张比较大的图片,也就是 ...或者获得更多的全貌信息,多点触摸与绽放功能正是满足这种应用场景的技术。
Android Studio实例源码,主要介绍常用app的代码
本Demo主要实现了安卓(Android)TCP 客户端(Client)和服务器(Server)Demo的Socket通讯。以及对接硬件的项目数据在十六进制&&byte&&int的转换处理。 要注意BufferedReader的readLine()方法的阻塞问题: 读取socket输入...