Android SurfaceView画板操作
本文实例为大家分享了AndroidSurfaceView画板操作的具体代码,供大家参考,具体内容如下
画板——画路径
packagecom.example.review.view; importandroid.content.Context; importandroid.graphics.Canvas; importandroid.graphics.Color; importandroid.graphics.Paint; importandroid.graphics.Path; importandroid.graphics.PorterDuff; importandroid.util.AttributeSet; importandroid.view.MotionEvent; importandroid.view.SurfaceHolder; importandroid.view.SurfaceView; /** *画板画路径 */ publicclassHuabanViewextendsSurfaceViewimplementsSurfaceHolder.Callback{ privateSurfaceHoldersurfaceHolder; privatePathpath=newPath(); publicHuabanView(Contextcontext){ super(context); } publicHuabanView(Contextcontext,AttributeSetattrs){ super(context,attrs); surfaceHolder=getHolder(); surfaceHolder.addCallback(this);//获得surfaceview的生命周期 } publicHuabanView(Contextcontext,AttributeSetattrs,intdefStyleAttr){ super(context,attrs,defStyleAttr); } publicHuabanView(Contextcontext,AttributeSetattrs,intdefStyleAttr,intdefStyleRes){ super(context,attrs,defStyleAttr,defStyleRes); } @Override publicvoidsurfaceCreated(SurfaceHolderholder){ newHuabanThread().start(); } @Override publicvoidsurfaceChanged(SurfaceHolderholder,intformat,intwidth,intheight){ } @Override publicvoidsurfaceDestroyed(SurfaceHolderholder){ } @Override publicbooleanonTouchEvent(MotionEventevent){ floatx=event.getX(); floaty=event.getY(); intaction=event.getAction(); if(action==MotionEvent.ACTION_DOWN){//按下 path.moveTo(x,y); }elseif(action==MotionEvent.ACTION_MOVE){//移动 path.lineTo(x,y); } returntrue; } classHuabanThreadextendsThread{ @Override publicvoidrun(){ super.run(); //TODO:画笔 Paintpaint=newPaint(); paint.setColor(Color.BLACK); paint.setStrokeWidth(20); paint.setStyle(Paint.Style.STROKE); paint.setAntiAlias(true); //TODO:画布 while(true){ Canvascanvas=surfaceHolder.lockCanvas(); //避免空指针 if(canvas==null){ return; } canvas.drawColor(Color.WHITE,PorterDuff.Mode.CLEAR); canvas.drawColor(Color.WHITE); canvas.drawPath(path,paint); surfaceHolder.unlockCanvasAndPost(canvas); } } } publicvoidclose(){ path.reset(); } }
画板——画动态直线
packagecom.example.review.view; importandroid.content.Context; importandroid.graphics.Canvas; importandroid.graphics.Color; importandroid.graphics.Paint; importandroid.graphics.Path; importandroid.graphics.PorterDuff; importandroid.util.AttributeSet; importandroid.view.SurfaceHolder; importandroid.view.SurfaceView; /** *画板画路径 *画动态直线 */ publicclassLineViewextendsSurfaceViewimplementsSurfaceHolder.Callback{ privateSurfaceHoldersurfaceHolder; privatePathpath=newPath(); privateintx=0; publicLineView(Contextcontext){ super(context); } publicLineView(Contextcontext,AttributeSetattrs){ super(context,attrs); surfaceHolder=getHolder(); surfaceHolder.addCallback(this);//获得surfaceview的生命周期 } publicLineView(Contextcontext,AttributeSetattrs,intdefStyleAttr){ super(context,attrs,defStyleAttr); } publicLineView(Contextcontext,AttributeSetattrs,intdefStyleAttr,intdefStyleRes){ super(context,attrs,defStyleAttr,defStyleRes); } @Override publicvoidsurfaceCreated(SurfaceHolderholder){ newHuabanThread().start(); } @Override publicvoidsurfaceChanged(SurfaceHolderholder,intformat,intwidth,intheight){ } @Override publicvoidsurfaceDestroyed(SurfaceHolderholder){ } classHuabanThreadextendsThread{ @Override publicvoidrun(){ super.run(); //TODO:画笔 Paintpaint=newPaint(); paint.setColor(Color.BLACK); paint.setStrokeWidth(20); paint.setStyle(Paint.Style.STROKE); paint.setAntiAlias(true); //TODO:画布 while(true){ Canvascanvas=surfaceHolder.lockCanvas(); //避免空指针 if(canvas==null){ return; } canvas.drawColor(Color.WHITE,PorterDuff.Mode.CLEAR); canvas.drawColor(Color.WHITE); canvas.drawLine(0,100,x++,100,paint); surfaceHolder.unlockCanvasAndPost(canvas); } } } publicvoidclose(){ path.reset(); } }
基本图形
//圆 canvas.drawOval(50,100,150,200,paint); //半圆 canvas.drawArc(500,500,700,700,20,180,true,paint); //矩形 canvas.drawRect(100,300,250,400,paint); //三角形 canvas.drawLine(100,450,0,600,paint); canvas.drawLine(0,600,400,600,paint); canvas.drawLine(100,450,400,600,paint); //梯形 canvas.drawLine(100,700,200,700,paint); canvas.drawLine(100,700,0,900,paint); canvas.drawLine(0,900,400,900,paint); canvas.drawLine(200,700,400,900,paint); //文字 canvas.drawText("截图",100,1000,paint);
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。