MultiTouchActivity Java代码
  1. packagecom.zhaokai.multitouch;
  2. importandroid.app.Activity;
  3. importandroid.os.Bundle;
  4. importandroid.view.Window;
  5. importandroid.view.WindowManager;
  6. publicclassMultiTouchActivityextendsActivity{
  7. /**Calledwhentheactivityisfirstcreated.*/
  8. /**Calledwhentheactivityisfirstcreated.*/
  9. @Override
  10. publicvoidonCreate(BundlesavedInstanceState){
  11. super.onCreate(savedInstanceState);
  12. //隐藏标题栏
  13. requestWindowFeature(Window.FEATURE_NO_TITLE);
  14. //设置成全屏
  15. getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
  16. //设置为上面的MTView
  17. setContentView(newMySurfaceView(this));
  18. }
  19. }


SurfaceView类:

Java代码
  1. packagecom.zhaokai.multitouch;
  2. importandroid.content.Context;
  3. importandroid.graphics.Canvas;
  4. importandroid.graphics.Color;
  5. importandroid.graphics.Paint;
  6. importandroid.view.MotionEvent;
  7. importandroid.view.SurfaceHolder;
  8. importandroid.view.SurfaceHolder.Callback;
  9. importandroid.view.SurfaceView;
  10. publicclassMySurfaceViewextendsSurfaceViewimplementsCallback{
  11. privatestaticfinalintMAX_TOUCHPOINTS=10;
  12. privatestaticfinalStringSTART_TEXT="请随便触摸屏幕进行测试";
  13. privatePainttextPaint=newPaint();
  14. privatePainttouchPaints[]=newPaint[MAX_TOUCHPOINTS];
  15. privateintcolors[]=newint[MAX_TOUCHPOINTS];
  16. privateintwidth,height;
  17. privatefloatscale=1.0f;
  18. publicMySurfaceView(Contextcontext){
  19. super(context);
  20. SurfaceHolderholder=getHolder();
  21. holder.addCallback(this);
  22. setFocusable(true);//确保我们的View能获得输入焦点
  23. setFocusableInTouchMode(true);//确保能接收到触屏事件
  24. init();
  25. }
  26. publicvoidinit(){
  27. //初始化10个不同颜色的画笔
  28. textPaint.setColor(Color.WHITE);
  29. colors[0]=Color.BLUE;
  30. colors[1]=Color.RED;
  31. colors[2]=Color.GREEN;
  32. colors[3]=Color.YELLOW;
  33. colors[4]=Color.CYAN;
  34. colors[5]=Color.MAGENTA;
  35. colors[6]=Color.DKGRAY;
  36. colors[7]=Color.WHITE;
  37. colors[8]=Color.LTGRAY;
  38. colors[9]=Color.GRAY;
  39. for(inti=0;i<MAX_TOUCHPOINTS;i++){
  40. touchPaints[i]=newPaint();
  41. touchPaints[i].setColor(colors[i]);
  42. }
  43. }
  44. @Override
  45. publicbooleanonTouchEvent(MotionEventevent){
  46. intpointerCount=event.getPointerCount();
  47. if(pointerCount>MAX_TOUCHPOINTS){
  48. pointerCount=MAX_TOUCHPOINTS;
  49. }
  50. Canvasc=getHolder().lockCanvas();
  51. if(c!=null){
  52. c.drawColor(Color.BLACK);
  53. if(event.getAction()==MotionEvent.ACTION_UP){
  54. //当手离开屏幕时,清屏
  55. c.drawColor(Color.BLACK);
  56. }else{
  57. //先在屏幕上画一个十字,然后画一个圆
  58. for(inti=0;i<pointerCount;i++){
  59. //获取一个触点的坐标,然后开始绘制
  60. intid=event.getPointerId(i);
  61. intx=(int)event.getX(i);
  62. inty=(int)event.getY(i);
  63. drawCrosshairsAndText(x,y,touchPaints[id],i,id,c);
  64. }
  65. for(inti=0;i<pointerCount;i++){
  66. intid=event.getPointerId(i);
  67. intx=(int)event.getX(i);
  68. inty=(int)event.getY(i);
  69. drawCircle(x,y,touchPaints[id],c);
  70. }
  71. }
  72. getHolder().unlockCanvasAndPost(c);
  73. }
  74. returntrue;
  75. }
  76. privatevoiddrawCrosshairsAndText(intx,inty,Paintpaint,intptr,intid,Canvasc){
  77. c.drawLine(0,y,width,y,paint);
  78. c.drawLine(x,0,x,height,paint);
  79. inttextY=(int)((15+20*ptr)*scale);
  80. c.drawText("x"+ptr+"="+x,10*scale,textY,textPaint);
  81. c.drawText("y"+ptr+"="+y,70*scale,textY,textPaint);
  82. c.drawText("id"+ptr+"="+id,width-55*scale,textY,textPaint);
  83. }
  84. privatevoiddrawCircle(intx,inty,Paintpaint,Canvasc){
  85. c.drawCircle(x,y,40*scale,paint);
  86. }
  87. @Override
  88. publicvoidsurfaceChanged(SurfaceHolderholder,intformat,intwidth,
  89. intheight){
  90. this.width=width;
  91. this.height=height;
  92. if(width>height){
  93. this.scale=width/480f;
  94. }else{
  95. this.scale=height/480f;
  96. }
  97. textPaint.setTextSize(14*scale);
  98. Canvasc=getHolder().lockCanvas();
  99. if(c!=null){//背景黑色
  100. c.drawColor(Color.BLACK);
  101. floattWidth=textPaint.measureText(START_TEXT);
  102. c.drawText(START_TEXT,width/2-tWidth/2,height/2,textPaint);
  103. getHolder().unlockCanvasAndPost(c);
  104. }
  105. }
  106. @Override
  107. publicvoidsurfaceCreated(SurfaceHolderholder){
  108. //TODOAuto-generatedmethodstub
  109. }
  110. @Override
  111. publicvoidsurfaceDestroyed(SurfaceHolderholder){
  112. //TODOAuto-generatedmethodstub
  113. }
  114. }

更多相关文章

  1. Android屏蔽HOME键
  2. Android简明开发教程十六:Button 画刷示例
  3. android 保持屏幕长亮及解锁的方法
  4. Android(安卓)Drawable、Bitmap、byte[]之间的转换
  5. Android判断应用是否存在
  6. Android(安卓)Activity 常用功能设置(全屏、横竖屏等)
  7. android获取设备屏幕大小的方法
  8. Android(安卓)获取手机的IMEI等设备信息
  9. Android(安卓)实现Activity后台运行

随机推荐

  1. SQL Server存储过程中使用表值作为输入参
  2. sqlserver中存储过程的递归调用示例
  3. 一道关于数据库(经典父子级 ID 关联)更新
  4. 关于SQL的几道小题详解(sql进阶)
  5. 深入分析SQL Server 存储过程
  6. SQL函数substr使用简介
  7. SqlServer中查看当前Open的Cursor方法
  8. 介绍备份和还原MySQL数据的两种方法
  9. 调整SQLServer2000运行中数据库结构
  10. Select count(*)、Count(1)和Count(列)的