SurfaceView和view分别实现触摸轨迹

一、引言

         想实现一个空白的画板,上面可以画出手滑动的轨迹,就这么一个小需求。一般就来讲就两种实现方式,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);
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值