安卓实现用户签名
来源:互联网 发布:app软件怎么制作 编辑:程序博客网 时间:2024/05/16 09:24
package com.example.scratch.view;import android.content.Context;import android.graphics.Bitmap;import android.graphics.Bitmap.Config;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;/** * 这是自定义View实现用户签名 * * @author nyw * */public class SignatureCardView extends View { /** * 绘制线条的Paint,即用户手指绘制Path */ private Paint mOutterPaint = new Paint(); /** * 记录用户绘制的Path */ private Path mPath = new Path(); /** * 内存中创建的Canvas,即画布 */ private Canvas mCanvas; /** * mCanvas绘制内容在其上 */ private Bitmap mBitmap; /** * 记录用户当前的x轴和y轴 */ private int mLastX; private int mLastY; public SignatureCardView(Context context) {this(context,null);}/** * @param context * @param attrs * @param defStyleAttr */public SignatureCardView(Context context, AttributeSet attrs,int defStyleAttr) {super(context, attrs, defStyleAttr);init();}/** * @param context * @param attrs * 系统会自动调用这个构造方法,上面两个不自动调用 */public SignatureCardView(Context context, AttributeSet attrs) {this(context,attrs,0);}private void init(){mPath=new Path();}@Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {// TODO Auto-generated method stubsuper.onMeasure(widthMeasureSpec, heightMeasureSpec);int width = getMeasuredWidth(); int height = getMeasuredHeight(); // 初始化bitmap mBitmap = Bitmap.createBitmap(width, height, Config.ARGB_8888); mCanvas = new Canvas(mBitmap); // 设置画笔 mOutterPaint.setColor(Color.RED); mOutterPaint.setAntiAlias(true); mOutterPaint.setDither(true); mOutterPaint.setStyle(Paint.Style.STROKE); mOutterPaint.setStrokeJoin(Paint.Join.ROUND); // 圆角 mOutterPaint.setStrokeCap(Paint.Cap.ROUND); // 圆角 // 设置画笔宽度 mOutterPaint.setStrokeWidth(20); }@Override protected void onDraw(Canvas canvas) { drawPath(); canvas.drawBitmap(mBitmap, 0, 0, null); } /** * 绘制线条 */ private void drawPath() { mCanvas.drawPath(mPath, mOutterPaint); } @Override public boolean onTouchEvent(MotionEvent event) { int action = event.getAction(); int x = (int) event.getX(); int y = (int) event.getY(); switch (action) { case MotionEvent.ACTION_DOWN: mLastX = x; mLastY = y; mPath.moveTo(mLastX, mLastY); break; case MotionEvent.ACTION_MOVE: int dx = Math.abs(x - mLastX); int dy = Math.abs(y - mLastY); if (dx > 3 || dy > 3) mPath.lineTo(x, y); mLastX = x; mLastY = y; break; } invalidate(); return true; } }
0 0
- 安卓实现用户签名
- 获取安卓签名
- 安卓开发-签名
- 【安卓】签名
- 安卓模仿签名
- 安卓自定义视图 - 手写签名的实现
- 安卓生成签名并签名打包
- 安卓签名私钥公钥制作
- cocos2dx 打包安卓,签名
- 安卓签名文件研究
- 安卓重新签名问题
- 安卓apk签名方法
- 安卓应用程序的签名
- 查看安卓应用签名
- ionic2App签名(安卓)
- 安卓检测用户吹气功能的实现:吹一吹
- 安卓开发实例(2)实现用户注册
- 为你的安卓应用实现自签名的 SSL 证书
- PAT(乙级)1024 有理数四则运算(20)
- hdu 5877/ 2016 ACM/ICPC Dalian Online 1010 Weak Pair
- 这本书不错,值得大家学习
- shell 脚步批量转换文件编码
- 软件设计之——“高内聚低耦合”
- 安卓实现用户签名
- flexbox基本原理
- C#网络爬虫-强化版
- 十进制转二进制
- 51nod 1432 独木舟(贪心)
- 八大排序算法
- HDU5876 补图求最短路 2016ACM ICPC青岛网络赛
- HDU1875-畅通工程再续(Prim算法+Kruskal算法)
- |洛谷|动态规划|P1164 小A点菜