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程序设计有所帮助。