这是我看着别人的博客写的 他的博客地址是 http://blog.csdn.net/venusic/article/details/52096710
他写的demo很不错 可是有好多地方可以改进 我在他的基础上改进了很多东西 包括添加虚线 照片底版颜色 设置
虚线设置很麻烦 起码在用这个工具类的时候关系虚线的设置很麻烦 弄了好久 代码时完整的 可以直接复制 拿来用
先看效果图
先是上传 封装好的工具
package com.example.administrator.dianziqianming; import android.content.Context; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Path; import android.graphics.PorterDuff; import android.support.annotation.ColorInt; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.View; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; public class LinePathView extends View { private Context mContext; /** * 笔画X坐标起点 */ private float mX; /** * 笔画Y坐标起点 */ private float mY; /** * 手写画笔 */ private final Paint mGesturePaint = new Paint(); /** * 路径 */ private final Path mPath = new Path(); /** * 签名画笔 */ private Canvas cacheCanvas; /** * 签名画布 */ private Bitmap cachebBitmap; /** * 是否已经签名 */ private boolean isTouched = false; /** * 画笔宽度 px; */ private int mPaintWidth = 10; /** * 前景色 */ private int mPenColor = Color.BLACK; /** * 前景色 */ private int mBeiJingColor = Color.WHITE; /** /** * 背景色(指最终签名结果文件的背景颜色,默认为透明色) */ private int mBackColor=Color.TRANSPARENT; public LinePathView(Context context) { super(context); init(context); } public LinePathView(Context context, AttributeSet attrs) { super(context, attrs); init(context); } public LinePathView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(context); } public void init(Context context) { this.mContext = context; //设置抗锯齿 mGesturePaint.setAntiAlias(true); //设置签名笔画样式 mGesturePaint.setStyle(Paint.Style.STROKE); //设置笔画宽度 mGesturePaint.setStrokeWidth(mPaintWidth); //设置签名颜色 mGesturePaint.setColor(mPenColor); } @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { super.onSizeChanged(w, h, oldw, oldh); //创建跟view一样大的bitmap,用来保存签名 cachebBitmap = Bitmap.createBitmap(getWidth(), getHeight(), Bitmap.Config.ARGB_8888); cacheCanvas = new Canvas(cachebBitmap); cacheCanvas.drawColor(mBackColor); // cachebBitmap isTouched=false; } @Override public boolean onTouchEvent(MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: touchDown(event); break; case MotionEvent.ACTION_MOVE: isTouched = true; touchMove(event); break; case MotionEvent.ACTION_UP: //将路径画到bitmap中,即一次笔画完成才去更新bitmap,而手势轨迹是实时显示在画板上的。 cacheCanvas.drawPath(mPath, mGesturePaint); mPath.reset(); break; } // 更新绘制 invalidate(); return true; } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); //画此次笔画之前的签名 canvas.drawBitmap(cachebBitmap, 0, 0, mGesturePaint); // 通过画布绘制多点形成的图形 canvas.drawPath(mPath,