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

it2022-05-08  6

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

使用到的方法大致有这样: 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共同讨论下。 项目地址 :


最新回复(0)