Android 自定义写字板控件实现用图片做橡皮擦实现擦除功能

本文介绍了如何在Android项目中创建一个自定义写字板控件,用于实现签名并使用图片作为橡皮擦进行擦除操作。通过动态添加图片并允许拖动图片以实现擦除效果,详细步骤包括自定义写字板的创建、XML布局配置及Activity的使用。
摘要由CSDN通过智能技术生成

在最近的开发项目中,要实现自定义写字板实现签名和用图片做橡皮擦实现擦除功能,这就需要动态添加图片,然后拖动图片的同时,实现擦除的效果,具体步骤如下:
1.自定义写字板:

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.PorterDuff;
import android.graphics.PorterDuffXfermode;
import android.util.AttributeSet;
import android.util.DisplayMetrics;
import android.view.MotionEvent;
import android.view.View;

public class WritingBoardView extends View {
   
    // 定义记录前一个拖动事件发生点的坐标
    float preX;
    float preY;
    private Path mPath;
    private Paint mEraserPaint;
    public Paint mPaint = null;
    private int Pen = 1;//画笔
    private int Eraser = 2;//橡皮擦
    private int mMode = 1;
    // 定义一个内存中的图片,该图片将作为缓冲区
    Bitmap mCacheBitmap = null;
    // 定义cacheBitmap上的Canvas对象
    Canvas mCacheCanvas = null;
    private onLocationListener mLocationListener;/*listen to the Rect */
    public WritingBoardView(Context context) {
   
        this(context,null);
    }

    public WritingBoardView(Context context, AttributeSet attrs) {
   
        super(context, attrs);
        setFocusable(true);
        // 创建一个与该View相同大小的缓存区
        setScreenWH();
        mPath = new Path();
        // 设置cacheCanvas将会绘制到内存中的cacheBitmap上
        mCacheCanvas.setBitmap(mCacheBitmap);
        // 设置画笔的颜色
        mPaint = new Paint(Paint.DITHER_FLAG);
        mPaint.setColor(Color.RED);
        // 设置画笔风格
        mPaint.setStyle(Paint.Style.STROKE);
        mPaint.setStrokeWidth(3);
        // 反锯齿
        mPaint.setAntiAlias(true);
        mPaint.setDither(true);

        //橡皮擦
        mEraserPaint = new Paint();
        mEraserPaint.setAlpha(0);
        //这个属性是设置paint为橡皮擦重中之重
        //这是重点
        //下面这句代码是橡皮擦设置的重点
        mEraserPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN));
        //上面这句代码是橡皮擦设置的重点(重要的事是不是一定要说三遍)
        mEraserPaint.setAntiAlias(true);
        mEraserPaint.setDither(true);
        mEraserPaint.setStyle(Paint.Style.STROKE);
        mEraserPaint.setStrokeJoin(Paint.Join.ROUND);
        mEraserPaint.setStrokeWidth(50);
    }

    private void setScreenWH() {
   
        DisplayMetrics dm = new DisplayMetrics();
        dm = this.getResources().getDisplayMetrics();
        int screenWidth = dm.widthPixels;
        int screenHeight = dm.heightPixels;
        mCacheBi
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

安卓兼职framework应用工程师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值