自定义视图2
画板
public class HuaBanView extends SurfaceView implements SurfaceHolder.Callback {
private Paint paint;//画笔
private Path path;//路径
public void init(){//初始化:做准备工作
getHolder().addCallback(this);
paint= new Paint();
paint.setColor(Color.RED);//颜色
paint.setStrokeWidth(30);//粗细
paint.setAntiAlias(true);//抗锯齿
paint.setStyle(Paint.Style.STROKE);//设置画笔的样式:空心STROKE 实心FILL
path = new Path();
}
public HuaBanView(Context context) {
super(context);
init();
}
public HuaBanView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public HuaBanView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
public HuaBanView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
init();
}
//用户触摸:按下 移动 抬起
@Override
public boolean onTouchEvent(MotionEvent event) {//event 事件
int action = event.getAction();//按下 移动 抬起
float x = event.getX();
float y = event.getY();
if(action == MotionEvent.ACTION_DOWN){//按下
path.moveTo(x,y);//确定起点
}else if(action == MotionEvent.ACTION_MOVE){//移动
path.lineTo(x,y);//链接点
}
return true;
}
//创建:绘制路径
@Override
public void surfaceCreated(@NonNull final SurfaceHolder holder) {
// Canvas canvas = holder.lockCanvas();
// path.moveTo(100,300);
// path.lineTo(300,500);
// path.lineTo(200,300);
// path.moveTo(500,300);
// path.lineTo(400,100);
// canvas.drawPath(path,paint);//绘制路径
// holder.unlockCanvasAndPost(canvas);
new Thread(new Runnable() {
@Override
public void run() {
while (true){
Canvas canvas = holder.lockCanvas();
canvas.drawColor(Color.WHITE, PorterDuff.Mode.CLEAR);
canvas.drawPath(path,paint);//绘制路径
holder.unlockCanvasAndPost(canvas);
}
}
}).start();
}
@Override
public void surfaceChanged(@NonNull SurfaceHolder holder, int format, int width, int height) {
}
@Override
public void surfaceDestroyed(@NonNull SurfaceHolder holder) {
}
}
图形
public class GraphView extends SurfaceView implements SurfaceHolder.Callback {
private Paint paint;
public void init(){
getHolder().addCallback(this);
paint = new Paint();
paint.setColor(Color.BLUE);//颜色
paint.setStrokeWidth(10);//粗细
paint.setTextSize(30);//文字大小
paint.setStyle(Paint.Style.STROKE);//实心
paint.setAntiAlias(true);//抗锯齿
}
public GraphView(Context context) {
super(context);
init();
}
public GraphView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public GraphView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
public GraphView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
init();
}
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
@Override
public void surfaceCreated(@NonNull SurfaceHolder holder) {
Canvas canvas = holder.lockCanvas();
//点
canvas.drawPoint(100,100,paint);
//线
canvas.drawLine(200,200,300,300,paint);
//圆
canvas.drawCircle(200,500,200,paint);
//文字:必须是实心
paint.setStyle(Paint.Style.FILL);
canvas.drawText("sss",400,500,paint);
//图片
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.erha);
canvas.drawBitmap(bitmap,400,600,paint);
//椭圆
// canvas.drawOval(100,200,500,700,paint);
RectF rectF = new RectF(100,200,500,700);
canvas.drawOval(rectF,paint);
//矩形
canvas.drawRect(rectF,paint);
//扇形
RectF rectF2 = new RectF(100,800,500,1200);
canvas.drawArc(rectF2,-40,90,true,paint);
holder.unlockCanvasAndPost(canvas);
}
@Override
public void surfaceChanged(@NonNull SurfaceHolder holder, int format, int width, int height) {
}
@Override
public void surfaceDestroyed(@NonNull SurfaceHolder holder) {
}
}
点击按钮加载扇形
扇形视图
public class ShanxingView extends SurfaceView implements SurfaceHolder.Callback {
private Paint paint;
private SurfaceHolder surfaceHolder;
public void init(){
getHolder().addCallback(this);
paint=new Paint();
paint.setStyle(Paint.Style.FILL);
paint.setStrokeWidth(20);
paint.setTextSize(20);
paint.setAntiAlias(true);
paint.setColor(Color.GREEN);
}
public ShanxingView(Context context) {
super(context);
init();
}
public ShanxingView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public ShanxingView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
public ShanxingView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
init();
}
private RectF rectF;
@Override
public void surfaceCreated(@NonNull SurfaceHolder holder) {
surfaceHolder = holder;//!!!!获取对象
}
@Override
public void surfaceChanged(@NonNull SurfaceHolder holder, int format, int width, int height) {
}
@Override
public void surfaceDestroyed(@NonNull SurfaceHolder holder) {
}
public void ddd(int a){
RectF rectF = new RectF(300,400,800,900);
for(int i=0;i<=a;i++){
Canvas canvas = surfaceHolder.lockCanvas();
paint.setColor(Color.GREEN);
canvas.drawOval(rectF,paint);
paint.setColor(Color.RED);
canvas.drawArc(rectF,-90,i,true,paint);
surfaceHolder.unlockCanvasAndPost(canvas);
}
}
}