[Android实例] android多点触摸demo .
16lz
2021-01-23
MultiTouchActivity Java代码
SurfaceView类:
Java代码
- packagecom.zhaokai.multitouch;
- importandroid.app.Activity;
- importandroid.os.Bundle;
- importandroid.view.Window;
- importandroid.view.WindowManager;
- publicclassMultiTouchActivityextendsActivity{
- /**Calledwhentheactivityisfirstcreated.*/
- /**Calledwhentheactivityisfirstcreated.*/
- @Override
- publicvoidonCreate(BundlesavedInstanceState){
- super.onCreate(savedInstanceState);
- //隐藏标题栏
- requestWindowFeature(Window.FEATURE_NO_TITLE);
- //设置成全屏
- getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
- //设置为上面的MTView
- setContentView(newMySurfaceView(this));
- }
- }
SurfaceView类:
Java代码
- packagecom.zhaokai.multitouch;
- importandroid.content.Context;
- importandroid.graphics.Canvas;
- importandroid.graphics.Color;
- importandroid.graphics.Paint;
- importandroid.view.MotionEvent;
- importandroid.view.SurfaceHolder;
- importandroid.view.SurfaceHolder.Callback;
- importandroid.view.SurfaceView;
- publicclassMySurfaceViewextendsSurfaceViewimplementsCallback{
- privatestaticfinalintMAX_TOUCHPOINTS=10;
- privatestaticfinalStringSTART_TEXT="请随便触摸屏幕进行测试";
- privatePainttextPaint=newPaint();
- privatePainttouchPaints[]=newPaint[MAX_TOUCHPOINTS];
- privateintcolors[]=newint[MAX_TOUCHPOINTS];
- privateintwidth,height;
- privatefloatscale=1.0f;
- publicMySurfaceView(Contextcontext){
- super(context);
- SurfaceHolderholder=getHolder();
- holder.addCallback(this);
- setFocusable(true);//确保我们的View能获得输入焦点
- setFocusableInTouchMode(true);//确保能接收到触屏事件
- init();
- }
- publicvoidinit(){
- //初始化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(inti=0;i<MAX_TOUCHPOINTS;i++){
- touchPaints[i]=newPaint();
- touchPaints[i].setColor(colors[i]);
- }
- }
- @Override
- publicbooleanonTouchEvent(MotionEventevent){
- intpointerCount=event.getPointerCount();
- if(pointerCount>MAX_TOUCHPOINTS){
- pointerCount=MAX_TOUCHPOINTS;
- }
- Canvasc=getHolder().lockCanvas();
- if(c!=null){
- c.drawColor(Color.BLACK);
- if(event.getAction()==MotionEvent.ACTION_UP){
- //当手离开屏幕时,清屏
- c.drawColor(Color.BLACK);
- }else{
- //先在屏幕上画一个十字,然后画一个圆
- for(inti=0;i<pointerCount;i++){
- //获取一个触点的坐标,然后开始绘制
- intid=event.getPointerId(i);
- intx=(int)event.getX(i);
- inty=(int)event.getY(i);
- drawCrosshairsAndText(x,y,touchPaints[id],i,id,c);
- }
- for(inti=0;i<pointerCount;i++){
- intid=event.getPointerId(i);
- intx=(int)event.getX(i);
- inty=(int)event.getY(i);
- drawCircle(x,y,touchPaints[id],c);
- }
- }
- getHolder().unlockCanvasAndPost(c);
- }
- returntrue;
- }
- privatevoiddrawCrosshairsAndText(intx,inty,Paintpaint,intptr,intid,Canvasc){
- c.drawLine(0,y,width,y,paint);
- c.drawLine(x,0,x,height,paint);
- inttextY=(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);
- }
- privatevoiddrawCircle(intx,inty,Paintpaint,Canvasc){
- c.drawCircle(x,y,40*scale,paint);
- }
- @Override
- publicvoidsurfaceChanged(SurfaceHolderholder,intformat,intwidth,
- intheight){
- this.width=width;
- this.height=height;
- if(width>height){
- this.scale=width/480f;
- }else{
- this.scale=height/480f;
- }
- textPaint.setTextSize(14*scale);
- Canvasc=getHolder().lockCanvas();
- if(c!=null){//背景黑色
- c.drawColor(Color.BLACK);
- floattWidth=textPaint.measureText(START_TEXT);
- c.drawText(START_TEXT,width/2-tWidth/2,height/2,textPaint);
- getHolder().unlockCanvasAndPost(c);
- }
- }
- @Override
- publicvoidsurfaceCreated(SurfaceHolderholder){
- //TODOAuto-generatedmethodstub
- }
- @Override
- publicvoidsurfaceDestroyed(SurfaceHolderholder){
- //TODOAuto-generatedmethodstub
- }
- }
更多相关文章
- 【Android】【基础】获取屏幕宽高
- Android:获取网页源代码
- Android软键盘之代码改变软键盘状态
- android 用代码设置margin属性,textView加粗
- Android调用百度地图API实现――实时定位代码
- android获取当前Canvas位图代码
- Android 代码获取手机ip地址(个人笔记)
- Android Studio 添加百分比布局库的依赖报错 第一行代码