Android自定义手写签名
来源:互联网 发布:Linux aarch 64 编辑:程序博客网 时间:2024/04/28 00:08
通过android自定义view 自定义手写签名栏,保存在本地相册
package com.exampl.eventdemo.widgets;import android.content.Context;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.Path;import android.util.AttributeSet;import android.view.MotionEvent;import android.view.View;import java.io.File;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;public class SignPadView extends View { /** * 记录手指的轨迹信息 */ private Path mPath; /** * 绘制样式 */ private Paint mPaint; /** * 用于存储Canvas中的图像 */ private Bitmap mBitmap; /** * 封装Bitmap, 绘制的内容自动在Bitmap中显示 */ private Canvas mBufferedCanvas; public SignPadView(Context context) { this(context, null); } public SignPadView(Context context, AttributeSet attrs) { super(context, attrs); init(context, attrs); } private void init(Context context, AttributeSet attributeSet){ mPath = new Path(); mPaint = new Paint(Paint.ANTI_ALIAS_FLAG); mPaint.setStyle(Paint.Style.STROKE); } @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { if(mBufferedCanvas != null){ mBufferedCanvas = null; } if(mBitmap != null){ mBitmap.recycle(); } // 1. 创建宽高指定的Bitmap mBitmap = Bitmap.createBitmap(w, h, Bitmap.Config.RGB_565); // 2. 绘制缓冲区 mBufferedCanvas = new Canvas(mBitmap); } /** * 控件自身通过 Canvas 参数,显示在屏幕上 * @param canvas */ @Override protected void onDraw(Canvas canvas) { mBufferedCanvas.drawColor(Color.WHITE); // 双缓冲技术 // 1. 绘制图片 mBufferedCanvas.drawPath(mPath, mPaint); // 2. 绘制屏幕 canvas.drawBitmap(mBitmap, 0, 0, mPaint);// canvas.drawPath(mPath, mPaint); } public void saveFile(String path){ if (mBitmap != null && path != null) { File file = new File(path); if(!file.exists()){ try { file.createNewFile(); } catch (IOException e) { e.printStackTrace(); } } try { FileOutputStream fout = new FileOutputStream(file); mBitmap.compress(Bitmap.CompressFormat.JPEG, 30, fout); fout.close(); } catch (IOException e) { e.printStackTrace(); } } } @Override public boolean onTouchEvent(MotionEvent event) { int action = event.getAction(); // 凡是在控件内部的各种事件操作,直接使用相对坐标 float ex = event.getX(); float ey = event.getY(); switch (action){ case MotionEvent.ACTION_DOWN: mPath.moveTo(ex, ey); // 指定当前新的线段的起始位置 break; case MotionEvent.ACTION_MOVE: mPath.lineTo(ex, ey); // 当前线段的点与指定的点之间连接一条很小的线段 break; case MotionEvent.ACTION_UP: break; } // 刷新当前控件,让Android系统自动显示内容 调用 onDraw方法 invalidate(); return true; }}
0 0
- Android自定义手写签名
- Android 自定义View(手写签名)
- android 手写签名、画板(自定义视图)的使用
- Android自定义View实现手写签名的功能
- Android 手写签名 Demo
- Android电子手写签名
- Android 手写签名和裁剪
- android 电子签名 手写签名 功能实现
- 手写签名
- android 超简单的手写签名Demo
- [Android实例] 手写签名,画笔颜色选择器
- 安卓自定义视图 - 手写签名的实现
- android自定义签名文件
- android自定义签名
- Android移动开发-Android屏幕手写签名的实现
- 【Android】手写优化-更为平滑的签名效果实现
- Android环境下使用cordova从事手写签名代码
- 请问Android手写签名咋个实现了?
- 远程会话已断开连接,因为访问被拒绝导致许可证存储的创建失败。请使用提升的权限运行远程桌面客户端
- Mac OS下使用SourceTree Push到Github时出现 POST git-receive-pack (chunked) 的解决办法
- C语言6种排序算法及其实现
- js 调用照片。测试已通过
- 【Python】第一章:准备工作(介绍库)
- Android自定义手写签名
- eclipse字体和背景颜色设置
- Wireshark实战分析之DNS协议分析
- Linux 6.4 解决 网卡 not active
- Oracle文档阅读指南
- 国外大神说-在编程中使用If语句的潜在危险
- winscp 向Ubuntu传输文件提示错误码3:permmision denied解决方法
- js 打开视频文件,测试已通过
- MySQL 5.7主从同步延迟优化大全