安卓实现用户签名

来源:互联网 发布: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