尊重原创,转载请注明:http://blog.csdn.net/zj695469296/article/details/50582347
快过年了,给大家一个抢红包的demo吧,redbag实现了移动、旋转、透明度3种渐变效果,设置活动时效为1分钟,会越来越快,直接上代码:
import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.os.SystemClock;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import java.util.Random;
/**
* 注意
* 1.如果不覆写onmeasure,那么画布的范围是整个屏幕(new出来的默认是matchparent),如果覆写了的话画布就是一个bitmap的宽高
* 2.构造函数必须要设置根布局和根布局的宽高
* 3.需要设置一个抢到红包个数的监听器
**/
public class RedBag extends View {
private float alpha = 255; //透明度
private float scale = 1; //缩放比例
private int degree = 0; //旋转角度
private float nowX;
private float nowY;
private float perX;
private float perY;
private float perAlpha;
private float scaleper;
private int width;//父控件的宽
private int height;//父控件的高
private Bitmap bitmap;
private int bitmapWidth;
private int bitmapHeight;
private Paint paint;
public boolean isflying = false;
private Activity mContext;
private ViewGroup rootView;
public RedBag(Context context) {
this(context, null);
}
public RedBag(Context context, AttributeSet attrs) {
super(context, attrs);
}
/**
* 构造函数
* @param context 当前的activity
* @param height 红包根布局的高度
* @param width 红包根布局的宽度
* @param viewGroup 红包的根布局
* @param observer 抢到红包的监听器
*/
public RedBag(Context context, int height, int width, ViewGroup viewGroup,RedBagObserver observer) {
this(context);
mContext = (Activity) context;
this.width = width;
this.height = height;
this.rootView = viewGroup;
this.observer = observer;
initEvent();
initData();
}
private void initData() {
bitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher);
bitmapWidth = bitmap.getWidth();
bitmapHeight = bitmap.getHeight();