Android编程开发之多点触摸(Multitouch)实现方法
本文实例讲述了Android编程开发之多点触摸(Multitouch)实现方法。分享给大家供大家参考,具体如下:
如果您对开发多点触摸程序感兴趣的话,那么本文将是一个很好的开始,android应用程序开发中,多点触摸不是那么遥不可及,实现起来也很简单,本例只需要两个类就能实现多点触摸。
首先来看看我们的视图类MTView.java:
packagecom.ideasandroid.demo; importandroid.content.Context; importandroid.graphics.Canvas; importandroid.graphics.Color; importandroid.graphics.Paint; importandroid.view.MotionEvent; importandroid.view.SurfaceHolder; importandroid.view.SurfaceView; publicclassMTViewextendsSurfaceViewimplementsSurfaceHolder.Callback{ privatestaticfinalintMAX_TOUCHPOINTS=10; privatestaticfinalStringSTART_TEXT="请随便触摸屏幕进行测试"; privatePainttextPaint=newPaint(); privatePainttouchPaints[]=newPaint[MAX_TOUCHPOINTS]; privateintcolors[]=newint[MAX_TOUCHPOINTS]; privateintwidth,height; privatefloatscale=1.0f; publicMTView(Contextcontext){ super(context); SurfaceHolderholder=getHolder(); holder.addCallback(this); setFocusable(true);//确保我们的View能获得输入焦点 setFocusableInTouchMode(true);//确保能接收到触屏事件 init(); } privatevoidinit(){ //初始化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; } //锁定Canvas,开始进行相应的界面处理 Canvasc=getHolder().lockCanvas(); if(c!=null){ c.drawColor(Color.BLACK); if(event.getAction()==MotionEvent.ACTION_UP){ //当手离开屏幕时,清屏 }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); } } //画完后,unlock getHolder().unlockCanvasAndPost(c); } returntrue; } /** *画十字及坐标信息 * *@paramx *@paramy *@parampaint *@paramptr *@paramid *@paramc */ 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); } /** *画圆 * *@paramx *@paramy *@parampaint *@paramc */ privatevoiddrawCircle(intx,inty,Paintpaint,Canvasc){ c.drawCircle(x,y,40*scale,paint); } /* *进入程序时背景画成黑色,然后把“START_TEXT”写到屏幕 */ 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); } } publicvoidsurfaceCreated(SurfaceHolderholder){ } publicvoidsurfaceDestroyed(SurfaceHolderholder){ } }
代码中都做了相应的注释,这里就不多说。
接下来看看我们的Activity,MultitouchVisible.java
packagecom.ideasandroid.demo; importandroid.app.Activity; importandroid.os.Bundle; importandroid.view.Window; importandroid.view.WindowManager; publicclassMultitouchVisibleextendsActivity{ @Override publicvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); //隐藏标题栏 requestWindowFeature(Window.FEATURE_NO_TITLE); //设置成全屏 getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); //设置为上面的MTView setContentView(newMTView(this)); } }
更多关于Android相关内容感兴趣的读者可查看本站专题:《Android开发入门与进阶教程》、《Android编程之activity操作技巧总结》、《Android视图View技巧总结》、《Android操作SQLite数据库技巧总结》、《Android操作json格式数据技巧总结》、《Android数据库操作技巧总结》、《Android文件操作技巧汇总》、《Android编程开发之SD卡操作方法汇总》、《Android资源操作技巧汇总》及《Android控件用法总结》
希望本文所述对大家Android程序设计有所帮助。