android 自定义View,根据手势使用Canvas绘制矩形和圆点

** 前言 :因项目需要,需要手势来绘制矩形和圆点,所以直接使用画布来操作更合适不过了。**

            使用到的方法大致有这样:
            Bitmap pointBitmap;
            private Paint mPaint;
            private Path mPath;
            private Rect rect = new Rect(0, 0, 0, 0);//手动绘制矩形
            onTouchEvent

1. 直接上代码,首先新建一个activity,来初始化布局和view

 private XfermodeView xmode_view;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    xmode_view = (XfermodeView) findViewById(R.id.xmode_view);
    xmode_view.setActivity(this);
    xmode_view.clearCanvas();
    xmode_view.setBitmap();
    xmode_view.setOnTouchCutListener(new XfermodeView.TouchCutListener() {
        @Override
        public void onEvent(int event) {

        }

        @Override
        public void touchBackUrl(String filePath) {

        }

        @Override
        public void touchCutError(String error) {

        }
    });

    findViewById(R.id.btn).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if (xmode_view.isPoint()) {
                xmode_view.setPoint(false);
            } else {
                xmode_view.setPoint(true);
            }
        }
    });

}

**

2. 布局文件

<?xml version="1.0" encoding="utf-8"?>

<Button
    android:id="@+id/btn"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:text="切换"/>

<com.example.maibenben.rectdrawview.XfermodeView
    android:id="@+id/xmode_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>

**

- 重点是这个自定义View类,XfermodeView.java
- 1.先初始化view,初始化画布和画笔,init()

private void init() {
        mPaint = new Paint();
        mPaint.setColor(paintColor);
        mPaint.setAlpha(0);
        mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN));
        mPaint.setAntiAlias(true);//抗锯齿
        mPaint.setStyle(Paint.Style.STROKE);
        mPaint.setStrokeWidth(4);


        tPaint = new Paint();
        tPaint.setColor(Color.parseColor("#345678"));
        tPaint.setAlpha(0);
        tPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN));
        tPaint.setAntiAlias(true);//抗锯齿
        tPaint.setStyle(Paint.Style.STROKE);
        tPaint.setStrokeWidth(4);

        mPath = new Path();

        mTextPaint = new Paint();
        mTextPaint.setColor(paintColor);
        mTextPaint.setTextSize(60);

        mPointPaint = new Paint();
        mPointPaint.setColor(paintColor);
        mPointPaint.setTextSize(60);
    }
//readme:我这边把矩形设置成了空心的,也可以设置成实行的,另外边框大小和边框颜色等都是可以根据修改来改的,我这边定义的初始化黑色的。

2.实现屏幕监听事件

public boolean onTouchEvent(MotionEvent event) {}

3.实现onDraw()方法,每次绘制完之后都会执行onDraw方法。

 @Override
    protected void onDraw(Canvas canvas) {

        //先画矩形的过程
        canvas.drawRect(rect, mPaint);
        //画圆点
        canvasPoint(canvas);
        for (RectString rect : rects) {
            //画矩形 ,成品
            canvas.drawText("你还好吗", rect.getRect().centerX(), rect.getRect().centerY(), mTextPaint);
            canvas.drawRect(rect.getRect(), tPaint);
        }

    }

4.另外 画的矩形和圆点 都是可以在绘制的范围内取消的。效果图如下:
4.1绘制圆点,点击圆点可以取消

在这里插入图片描述

4.2 绘制矩形,点击并取消
绘制矩形,点击并取消
4.3可以随意切换绘制矩形和圆点
随意切换

到这里就告一段落,有兴趣的或者正好需要这功能的可以留言,也可以下载demo共同讨论下。
项目地址 :

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值