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]);  }}@Overridepublic 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);      }  @Overridepublic 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);            }  }@Overridepublic void surfaceCreated(SurfaceHolder holder) {  // TODO Auto-generated method stub  }@Overridepublic void surfaceDestroyed(SurfaceHolder holder) {  // TODO Auto-generated method stub  } }

更多相关文章

  1. android 获取屏幕的长和宽
  2. android获取屏幕信息
  3. Android(安卓)获取手机的IMEI等设备信息
  4. Android透明字体画法
  5. Android之获取手机相关信息
  6. Android中屏幕密度和图片大小的关系分析
  7. Android(安卓)Screen Monitor使用
  8. Android的唤醒锁和键盘锁
  9. Android的四大天王

随机推荐

  1. 总结了几个Java锁的面试题,看你是否能融会
  2. 再议电商业务的复杂性
  3. markdown与Emmet插件的使用方式
  4. 课程表、用户注册及 css 预习
  5. 关于tp6多对多查询隐藏pivot字段
  6. 监控系统项目实施--安装与部署-- MySQL数
  7. 监控系统项目实施--安装与部署-- MySQL数
  8. 监控系统项目实施--安装与部署-- MySQL数
  9. 监控系统项目实施--安装与部署-- MySQL数
  10. 如何从io.Reader 中读数据