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);
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。