欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android 开发 Kotlin使用SignatureView实现画布签字

程序员文章站 2022-04-02 22:33:39
Android 开发 Kotlin使用SignatureView实现画布签字1,布局很简单,相对布局嵌套SigmatureView,再加两个确定按钮,重置按钮。pensize:画笔大小backgroundColor:背景颜色penColor:字体颜色这是凑字数的,告辞!

Android 开发 Kotlin使用SignatureView实现画布签字

1,布局很简单,相对布局嵌套SigmatureView,再加两个确定按钮,重置按钮。

  1. pensize:画笔大小
  2. backgroundColor:背景颜色
  3. penColor:字体颜色
  4. 这是凑字数的,告辞!
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                xmlns:sign="http://schemas.android.com/apk/res-auto"
                android:orientation="vertical"
                android:layout_width="match_parent"
                android:layout_height="match_parent">
  <Button
            android:id="@+id/btn_Reset"
            android:layout_width="match_parent"
            android:layout_height="@dimen/dp50"
            android:layout_alignParentBottom="true"
            android:background="@drawable/button_selector"
            android:text="@string/bt_save"
            android:textColor="@color/white"/>
    <com.kyanogen.signatureview.SignatureView
            android:id="@+id/signature_view"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_below="@+id/header"
            android:layout_marginBottom="@dimen/dp50"
            sign:penSize="5dp"
            sign:backgroundColor="#ffffff"
            sign:penColor="#000000"
            sign:enableSignature="true"/>
    <Button
            android:id="@+id/btn_confirm"
            android:layout_width="match_parent"
            android:layout_height="@dimen/dp50"
            android:layout_alignParentBottom="true"
            android:background="@drawable/button_selector"
            android:text="@string/bt_save"
            android:textColor="@color/white"/>
</RelativeLayout>

2,添加控件监听,处理响应时间,设置签字图片存储路径,然后一些图片的操作都写了注释。

override fun initData{ 
    btn_Reset.setOnClickListener{
       signature_view.clearCanvas()//清空画布
    }
    btn_confirm.setOnClickener{
     val bitmap = signature_view.signatureBitmap//获取画布签字结果
     saveFile(bitmap, "signature.png")
    }
}
 private fun getSDPath(): String {
        val sdCardExist: Boolean =
            Environment.getExternalStorageState() == Environment.MEDIA_MOUNTED // 判断sd卡是否存在
        if (sdCardExist) {
            sdDir = getExternalFilesDir(Environment.DIRECTORY_PICTURES)!!// 获取跟目录
        }
        return sdDir.absolutePath
    }
private fun saveFile(bm: Bitmap, fileName: String) {
        try {
            val path = getSDPath().plus("/test/")//设置存储路径
            val dirFile = File(path)
            if (!dirFile.exists()) {
                dirFile.mkdir()
            }
            val myCaptureFile = File(path + fileName)
            val bos: BufferedOutputStream
            bos = BufferedOutputStream(FileOutputStream(myCaptureFile))//字节缓冲输出流
            bm.compress(Bitmap.CompressFormat.PNG, 100, bos)
            bos.flush()
            bos.close()
        } catch (e: IOException) {
            e.printStackTrace()
        }
    }

3,签字图片都存下来了那不是想干啥就干啥,直接嘿嘿嘿…
Android 开发 Kotlin使用SignatureView实现画布签字

//我就要显示出来,谁说话也不好使
 var filelist = arrayListOf<File>()
 Luban.with(App.instance).load(images).ignoreBy(100)//luban图片压缩
            .setTargetDir(context.cacheDir.absolutePath)
            .setCompressListener(object : OnCompressListener {
                override fun onSuccess(file: File) {//压缩成功
                    filelist.add(file)//压缩完的结果存一下
                    if (filelist.size == images.size) {
                        putImage(filelist)//后台的大哥们也要看看潇洒的签名就传给他们瞅瞅
                    }
                }
                override fun onError(e: Throwable?) {
                    Toask.short("哦吼,出错了!")
                }
                override fun onStart() {
                }
            }).launch()
Glide.with(this).load(filelist .get(0).getAbsolutePath()).into(fontImg)//图片显示到控件,fontImg是我的控件名

4,打完收工,好像忘了点啥。
Android 开发 Kotlin使用SignatureView实现画布签字

//权限
 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
 <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
 //包引入
implementation 'com.kyanogen.signatureview:signature-view:1.2'
implementation 'top.zibin:Luban:1.1.8'
implementation 'com.github.bumptech.glide:glide:4.9.0'

本文地址:https://blog.csdn.net/qq_41273239/article/details/109351995