一、引言
想实现一个空白的画板,上面可以画出手滑动的轨迹,就这么一个小需求。一般就来讲就两种实现方式,view或者surfaceview。下面看看两种是如何实现的。
二、实现原理
先简单说一下实现原理:
(1)用一张白色的Bitmap作为画板
(2)用canvas在bitmap上画线
(3)为了画出平滑的曲线,要用canvas的drawPath(Path,Paint)方法。
(4)同时使用贝塞尔曲线来使曲线更加平滑
三、View实现
直接贴代码了:
package picturegame.view;
import android.annotation.SuppressLint;
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.Paint.Style;
import android.graphics.Path;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import com.winton.picturegame.R;
/**
* @ClassName: GameView
* @Description: TODO(这里用一句话描述这个类的作用)
* @author Winton winton_by@126.com
* @date 2015年9月26日 上午8:54:37
*
*/
public class GameView extends View{
private Paint paint = null; //
private Bitmap originalBitmap = null;//原始图
private Bitmap new1Bitmap = null;
private Bitmap new2Bitmap = null;
private float clickX =0;
private float clickY=0;
private float startX=0;
private float startY=0;
private boolean isMove = true;
private boolean isClear = false;
private int color =Color.RED;//默认画笔颜色
private float strokeWidth =20f;//默认画笔宽度
Path mPath;
public GameView(Context context) {
this(context,null);
// TODO Auto-generated constructor stub
}
public GameView(Context context,AttributeSet atts) {
this(context,atts,0);
// TODO Auto-generated constructor stub
}
@SuppressWarnings("static-access")
public GameView(Context context,AttributeSet atts,int defStyle) {
super(context,atts,defStyle);
// TODO Auto-generated constructor stub
originalBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.default_pic).copy(Bitmap.Config.ARGB_8888, true);