首先我们先创建一个类GuaGuaKa:在这个类里我们完成刮刮卡的大部分效果,创建画布,创建画笔,初始化其中的画笔画布,计算刮开的涂层面积占得百分比,绘制中奖信息,调用中奖信息,这些都在这个类里面。
下面我们看一下代码实现:
public class GuaGuaKa extends View {
private Paint mOutterPaint; //定义画笔
private Path mPath; //定义路径
private Canvas mCanvas; //定义画布
private Bitmap mBitmap; //定义图片
private int mLastX; // 获取横坐标
private int mLastY; // 获取纵坐标
private Bitmap mOutterBitmap;
//- - - - - - - - - - - - - -
// private Bitmap bitmap;
private String mText; //定义文本(中奖信息)
private Paint mBackPaint; //定义画笔
private Rect mTextBound; //记录刮奖信息的宽和高
private int mTextSize;
private int mTextColor;
private volatile boolean mComplete = false; //判断涂层区域是否消除达到阈值 (volatile保证子线程的更新和主线程的可见性)
/**
* 刮完涂层满足阈值回调接口
*/
public interface OnGuaGuaKaCompleteListener
{
void complete();
}
private OnGuaGuaKaCompleteListener mListener;
public void setOnGuaGuaKaCompleteListener(OnGuaGuaKaCompleteListener mListener)
{
this.mListener = mListener;
}
public GuaGuaKa(Context context) {
this(context,null);
}
public GuaGuaKa(Context context,AttributeSet attrs) {
this(context, attrs,0);
}
public GuaGuaKa(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
//设置一下自定义属性的值
TypedArray a = null;
try {
a = context.getTheme().obtainStyledAttributes(attrs,R.styleable.GuaGuaKa,defStyleAttr,0);
int n = a.getIndexCount();
for (int i = 0;i<n ;i++)
{
int attr = a.getIndex(i);
switch (attr)
{
case R.styleable.GuaGuaKa_text:
mText = a.getString(attr);
break;
case R.styleable.GuaGuaKa_textColor:
mTextColor = a.getColor(attr,0x000000);