安卓自定义签名组件

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

效果图

相关推荐
dd06s19 小时前
安卓上传依赖到maven私有仓库
android·java·maven
程序员陆业聪19 小时前
开发人员的汇报指南:故障、复盘、问题、阶段任务、人员情况,五种场景全覆盖
android
杉氧19 小时前
Kotlin 协程深度解析③:流式编程——Flow 的响应式进化
android·kotlin
私人珍藏库19 小时前
【Android】iTubeGo(去除限制)
android·智能手机·app·工具·多功能
2601_9547064920 小时前
云手机虚拟化技术深度拆解:从安卓容器到 GPU 直通
android·智能手机
范特西林20 小时前
Android 16 AppFunction 机制分析
android·ai编程
Coffeeee20 小时前
Android16升级,预测性返回适配起来到底难不难
android·程序员·kotlin
_李小白20 小时前
【android opencv学习笔记】Day 33: 直线检测之图像轮廓检测
android·opencv·学习
Mars-xq20 小时前
vscode 开发Android
android·ide·vscode
__Witheart__20 小时前
关于 uname 查看的内核版本号的后缀
android·linux·ubuntu·rockchip