安卓自定义签名组件

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" />

效果图

相关推荐
码农coding8 小时前
android12 开机动画分析
android
又见情义9 小时前
RK3568 Android 13 开机时间优化-禁用非必要系统服务
android
Android-Flutter9 小时前
Java Thread 和 Runnable 详解
android
mmsx10 小时前
osmdroid Overlay 体系详解:比例尺/罗盘/总绘图层有序叠放
android·源码·地图·osmdroid
又见情义11 小时前
RK3568 Android 13 开机时间优化-HAL 服务延时启动
android
v_348360876212 小时前
Android8 开机动画结束分析
android
美狐美颜SDK开放平台14 小时前
直播APP开发核心功能详解:美颜SDK、音视频、礼物等功能成本怎么计算?
android·人工智能·计算机视觉·音视频·直播美颜sdk
安河桥。14 小时前
Android视频流处理模块硬件加速器数据流转技术说明
android·图像处理·isp
hunterandroid14 小时前
[Android 从零到一] APK 体积优化实战:从 50MB 到 15MB 的瘦身之旅
android·前端