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:获取网页源代码
  2. android中检查是否联网code
  3. Android(安卓)欢迎界面淡出动画效果(Animation)
  4. Android动画效果学习
  5. android 用代码设置margin属性,textView加粗
  6. Android软键盘之代码改变软键盘状态
  7. 【Android】【基础】获取屏幕宽高
  8. android 修改默认APN
  9. Rexsee API介绍:Android屏幕锁定,Keyguard函数与扩展源码

随机推荐

  1. Android提供的系统服务之--LayoutInflate
  2. android使用高德地图api
  3. cocos2dx--cocos2dx3.1.1android环境编译
  4. Android高手进阶教程(九)----Android Han
  5. Android(安卓)TabLayout 不显示标题的解
  6. android 程序執行logcat 指令並保存到文
  7. Android OpenGL ES 翻译
  8. ubuntu下编译Android出现的问题
  9. android raw读取超过1M文件的方法
  10. 退出Activity时,保存edittext的内容