安卓自定义签名组件

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

效果图

相关推荐
Lvan的前端笔记18 小时前
AndroidX 完全入门指南
android·androidx
帅次19 小时前
Android 应用高级面试:Window 近1年高频追问 18 题
android·面试·职场和发展
总捣什么乱119 小时前
MySQL MySQL是怎么保证主备一致的?
android·mysql·adb
zzm62820 小时前
精读 HinDroid:基于异构信息网络的安卓恶意软件检测
android
weixin_4407841120 小时前
Android基础知识汇总
android·java·android studio
small-pudding21 小时前
Cocos Creator Android 热更新方案实践:逻辑更新、远程 Bundle 与线上回滚
android
00后程序员张21 小时前
iOS加固技术路线全面解析:Bitcode模式、源码模式与汇编模式对比及爱加密优势
android·汇编·ios·小程序·uni-app·cocoa·iphone
summerkissyou198721 小时前
android - 性能 - Perfetto - 内存分析教程及例子
android·性能
超开心~1 天前
Android AAudio介绍及流程分析
android
取个名字太难了~1 天前
最新手机外接相机实时传输 + 动态美颜完整项目源码
android·数码相机·智能手机·美颜·相机连接·demu