安卓自定义签名组件

java 复制代码
public class SignatureView extends View {

    private Path signaturePath;
    private Paint signaturePaint;
    private int signatureColor;
    private float signatureStrokeWidth;

    public SignatureView(Context context) {
        super(context);
        init();
    }

    public SignatureView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    public SignatureView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init();
    }

    private void init() {
        // 初始化路径和画笔
        signaturePath = new Path();

        signatureColor = Color.BLACK;
        signatureStrokeWidth = 5f;

        signaturePaint = new Paint();
        signaturePaint.setColor(signatureColor);
        signaturePaint.setStyle(Paint.Style.STROKE);
        signaturePaint.setStrokeWidth(signatureStrokeWidth);
        signaturePaint.setAntiAlias(true);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        // 绘制签名路径
        canvas.drawPath(signaturePath, signaturePaint);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        float xPos = event.getX();
        float yPos = event.getY();

        switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                signaturePath.moveTo(xPos, yPos);
                return true;
            case MotionEvent.ACTION_MOVE:
                signaturePath.lineTo(xPos, yPos);
                break;
            case MotionEvent.ACTION_UP:
                // 滑动结束时的操作(如果有)
                break;
        }

        // 重新绘制视图
        invalidate();
        return true;
    }

    // 清除签名
    public void clearSignature() {
        signaturePath.reset();
        invalidate();
    }

    //获取签名位图
    public Bitmap getSignatureBitmap() {
        Bitmap bitmap = Bitmap.createBitmap(getWidth(), getHeight(), Bitmap.Config.ARGB_8888);
        Canvas canvas = new Canvas(bitmap);
        draw(canvas);
        return bitmap;
    }

    // 更改笔记颜色
    public void setSignatureColor(int color) {
        // 设置您想要的颜色
        signatureColor = color;
        signaturePaint.setColor(signatureColor);
        invalidate();
    }

    // 更改笔记大小
    public void setSignatureStrokeWidth(float width) {
        // 设置您想要的笔记宽度
        signatureStrokeWidth = width;
        signaturePaint.setStrokeWidth(signatureStrokeWidth);
        invalidate();
    }
}

调用方法

XML 复制代码
    <com.zx.mocab.views.SignatureView
        android:id="@+id/signatureView"
        android:layout_width="match_parent"
        android:background="@drawable/rounded_rectangle_corner_10_color_white"
        android:layout_height="match_parent" />

效果图

相关推荐
qq_452396235 小时前
第十篇:《自动化处理验证码:OCR、接口绕过与第三方服务》
android·自动化·ocr
a8a3026 小时前
Laravel 10.x核心特性深度解析
android
angerdream8 小时前
Android手把手编写儿童手机远程监控App之UUID
android
dalancon8 小时前
Android OomAdjuster流程
android
河婆墟邓紫棋8 小时前
MIUI中的权限
android·github
我命由我1234510 小时前
Java 开发 - CountDownLatch 不需要手动关闭
android·java·开发语言·jvm·kotlin·android studio·android-studio
众少成多积小致巨10 小时前
GNU Make 核心指南
android·c++
凛_Lin~~10 小时前
安卓进程保活方案记录(双重fork+文件锁+手搓parcel)
android·安卓
海天鹰10 小时前
安卓相机:获取最近拍摄的照片缩略图做相册按钮图标
android
tongyiixiaohuang10 小时前
技术案例分享:金蝶云星空客户数据同步到MySQL的实现
android·数据库·mysql