android抽奖动画,Android App中实现简单的刮刮卡抽奖效果的实例详解
主要思想:
將一個(gè)view設(shè)計(jì)成多層:背景層,含中獎(jiǎng)信息等;
遮蓋層,用于刮獎(jiǎng),使用關(guān)聯(lián)一個(gè)Bitmap的Canvas
在該Bitmap上,使用它的canvas.drawPath的api來(lái)處理 手勢(shì)滑動(dòng)(類(lèi)似刮獎(jiǎng)的動(dòng)作)
使用paint.setXfermode 來(lái)進(jìn)行消除手勢(shì)滑動(dòng)區(qū)域
public class GuaView extends View {
private Bitmap mBitmap; //遮蓋的圖層
private Canvas mCanvas; //繪制遮蓋圖層
private Paint mOuterPaint;
private Path mPath;
private float mLastX;
private float mLastY;
private Bitmap mCoverBitmap; //遮蓋圖
private int mWidth,mHeight;
private Paint mInnerPaint;
private String mInfo;
public GuaView(Context context) {
this(context,null);
}
public GuaView(Context context,AttributeSet attrs) {
super(context,attrs);
init();
}
private void init() {
mPath = new Path();
mOuterPaint = new Paint();
mInnerPaint = new Paint();
mCoverBitmap = BitmapFactory.decodeResource(getResources(),R.drawable.fg_guaguaka);
mInfo = "¥ 5 0 0";
}
@Override
protected void onMeasure(int widthMeasureSpec,int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec,heightMeasureSpec);
mWidth = mCoverBitmap.getWidth();
mHeight = mCoverBitmap.getHeight();
setMeasuredDimension(mWidth,mHeight);
mBitmap = Bitmap.createBitmap(mWidth,mHeight,Bitmap.Config.ARGB_8888);
mCanvas = new Canvas(mBitmap);
mCanvas.drawBitmap(mCoverBitmap,null);
setOuterPaint();
setInnerPaint();
}
private void setInnerPaint() {
mInnerPaint.setColor(Color.RED);
mInnerPaint.setStyle(Paint.Style.STROKE);
mInnerPaint.setStrokeCap(Paint.Cap.ROUND);
mInnerPaint.setStrokeJoin(Paint.Join.ROUND);
mInnerPaint.setAntiAlias(true);
mInnerPaint.setDither(true); //防抖
mInnerPaint.setStrokeWidth(5);
mInnerPaint.setTextSize(100);
mInnerPaint.setTextAlign(Paint.Align.CENTER);
}
private void setOuterPaint() {
mOuterPaint.setColor(Color.GREEN);
mOuterPaint.setStyle(Paint.Style.STROKE);
mOuterPaint.setStrokeCap(Paint.Cap.ROUND);
mOuterPaint.setStrokeJoin(Paint.Join.ROUND);
mOuterPaint.setAntiAlias(true);
mOuterPaint.setDither(true); //防抖
mOuterPaint.setStrokeWidth(20);
}
@Override //Path
public boolean onTouchEvent(MotionEvent event) {
float x = event.getX();
float y = event.getY();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
mLastX = x;
mLastY = y;
mPath.moveTo(x,y);
break;
case MotionEvent.ACTION_MOVE:
float deltaX = Math.abs(x - mLastX);
float deltaY = Math.abs(y - mLastY);
if (deltaX > 5 || deltaY > 5) {
mPath.lineTo(x,y);
}
mLastX = x;
mLastY = y;
break;
case MotionEvent.ACTION_UP:
break;
}
invalidate();//調(diào)用onDraw
return true;
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawColor(Color.parseColor("#bbbbbb")); //背景底色 灰色
canvas.drawText(mInfo,mWidth / 2,mHeight / 4 * 3,mInnerPaint); //繪制文本
canvas.drawBitmap(mBitmap,null); //繪制mBitmap 這是一個(gè)可變的bitmap,通過(guò)mCanvas繪制,首先繪制了mCoverBitmap
drawPath();
}
private void drawPath() {
//使用該mode:dst和src相交后, 只保留dst,且除去相交的部份
mOuterPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_OUT));
mCanvas.drawPath(mPath,mOuterPaint);
}
}
Paint.Join 連續(xù)畫(huà)筆銜接時(shí):
MITER 在外邊緣以一個(gè)銳角連接
ROUND 以圓弧
BEVEL 以直線
Paint.Cap 指定對(duì)于 線和路徑(lines and paths) 的開(kāi)始和結(jié)束點(diǎn)的處理方式:
BUTT? ends with the path? 不超越它
ROUND? with the center at the end of the path 半圓
SQUARE? with the center at the end of the path 方形
總結(jié)
如果覺(jué)得編程之家網(wǎng)站內(nèi)容還不錯(cuò),歡迎將編程之家網(wǎng)站推薦給程序員好友。
本圖文內(nèi)容來(lái)源于網(wǎng)友網(wǎng)絡(luò)收集整理提供,作為學(xué)習(xí)參考使用,版權(quán)屬于原作者。
小編個(gè)人微信號(hào) jb51ccc
喜歡與人分享編程技術(shù)與工作經(jīng)驗(yàn),歡迎加入編程之家官方交流群!
總結(jié)
以上是生活随笔為你收集整理的android抽奖动画,Android App中实现简单的刮刮卡抽奖效果的实例详解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: C# Xamarin移动开发基础进修篇
- 下一篇: android新拟态实现方法,Andro