** 前言 :因项目需要,需要手势来绘制矩形和圆点,所以直接使用画布来操作更合适不过了。**
使用到的方法大致有这样:
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绘制圆点,点击圆点可以取消
4.2 绘制矩形,点击并取消
4.3可以随意切换绘制矩形和圆点
到这里就告一段落,有兴趣的或者正好需要这功能的可以留言,也可以下载demo共同讨论下。
项目地址 :