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. 布局文件

**

- 重点是这个自定义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绘制圆点,点击圆点可以取消

android 自定义View,根据手势使用Canvas绘制矩形和圆点_第1张图片

4.2 绘制矩形,点击并取消
android 自定义View,根据手势使用Canvas绘制矩形和圆点_第2张图片
4.3可以随意切换绘制矩形和圆点
android 自定义View,根据手势使用Canvas绘制矩形和圆点_第3张图片

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

你可能感兴趣的:(方法)