Android:实现签名功能——signature-pad库

文章目录
实现
可以借助 -pad 库提供的控件来实现
效果
步骤 1、添加 -pad 库的依赖 。
【Android:实现签名功能——signature-pad库】dependencies {implementation 'com.github.gcacace:signature-pad:1.3.1'}
2、在文件中使用控件 , 另外添加“清空”和“保存”两个按钮 。

3、实现清空控件内容的功能
调用.clear() 方法即可
public void clearSignature() {SignaturePad.clear();}
4、实现保存控件内容的功能
private void saveSignature() {//获取bitmapBitmap signatureBitmap = SignaturePad.getSignatureBitmap();//保存bitmap到相册if (addJpgSignatureToGallery2(signatureBitmap)) {Toast.makeText(this, "保存成功", Toast.LENGTH_SHORT).show();clearSignature();} else {Toast.makeText(this, "保存失败", Toast.LENGTH_SHORT).show();}}
5、实现兼容以下和以上“保存文件到公共目录”
private boolean addJpgSignatureToGallery2(Bitmap signature) {boolean result = false;try {//新建文件名String fileName = String.format(Locale.CHINA, "Signature_%d.jpg", System.currentTimeMillis());String path = fileSaveToPublic(this, fileName, signature);if(null == path){result = false;}else {result = true;}} catch (Exception e) {e.printStackTrace();}return result;}/*** 保存文件到公共目录* @param context 上下文* @param fileName 文件名* @param bitmap 文件* @return 路径 , 为空时表示保存失败*/public static String fileSaveToPublic(Context context, String fileName, Bitmap bitmap) {String path = null;if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) {//Android 10以下版本FileOutputStream fos = null;try {//设置路径 Pictures/File folder = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);//判断目录是否存在//目录不存在时自动创建if (folder.exists() || folder.mkdir()) {File file = new File(folder, fileName);fos = new FileOutputStream(file);//写入文件bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos);fos.flush();path = file.getAbsolutePath();}} catch (IOException e) {e.printStackTrace();} finally {if (fos != null) {try {fos.close();} catch (IOException e) {e.printStackTrace();}}}} else {//Android 10及以上版本//设置路径 Pictures/String folder = Environment.DIRECTORY_PICTURES;//设置保存参数到ContentValues中ContentValues values = new ContentValues();//设置图片名称values.put(MediaStore.Images.Media.DISPLAY_NAME, fileName);//设置图片格式values.put(MediaStore.Images.Media.MIME_TYPE, "image/png");//设置图片路径values.put(MediaStore.Images.Media.RELATIVE_PATH, folder);//执行insert操作 , 向系统文件夹中添加文件//EXTERNAL_CONTENT_URI代表外部存储器 , 该值不变Uri uri = context.getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);OutputStream os = null;try {if (uri != null) {//若生成了uri , 则表示该文件添加成功//使用流将内容写入该uri中即可os = context.getContentResolver().openOutputStream(uri);bitmap.compress(Bitmap.CompressFormat.PNG, 100, os);os.flush();path = uri.getPath();}} catch (IOException e) {e.printStackTrace();} finally {if (os != null) {try {os.close();} catch (IOException e) {e.printStackTrace();}}}}return path;}