安卓实现用户签名



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();
	}
	@Override
	protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
		// TODO Auto-generated method stub
		super.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;  
    }  

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值