2021-04-02

自定义视图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);
        }

    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值