根据Android源码修改,具有微信彩蛋效果

主要代码

    public static class Board extends FrameLayout {        public static final boolean FIXED_STARS = true;        // 控制数量        public static final int NUM_CATS = 30;        static Random sRNG = new Random();        static float lerp(float a, float b, float f) {            return (b - a) * f + a;        }        static float randfrange(float a, float b) {            return lerp(a, b, sRNG.nextFloat());        }        static int randsign() {            return sRNG.nextBoolean() ? 1 : -1;        }        static <E> E pick(E[] array) {            if (array.length == 0)                return null;            return array[sRNG.nextInt(array.length)];        }        public class FlyingCat extends ImageView {            public static final float VMAX = 300.0f;            public static final float VMIN = 100.0f;            public float v, vr;            public float dist;            public float z;            public ComponentName component;            public FlyingCat(Context context, AttributeSet as) {                super(context, as);                setImageResource(R.drawable.star_anim);            }            public void reset() {                final float scale = lerp(0.5f, 1.5f, z);                setScaleX(scale);                setScaleY(scale);                // setX(-scale * getWidth() + 1);                setX(randfrange(0, Board.this.getHeight() - scale * getHeight()));                setY(randfrange(0, Board.this.getHeight() - scale * getHeight()));                v = lerp(VMIN, VMAX, z);                dist = 0;            }            public void update(float dt) {                dist += v * dt;                // setX(getX() + v * dt);                // 根据Y轴漂移                setY(getY() + v * dt);            }        }        TimeAnimator mAnim;        Context mContext;        public Board(Context context, AttributeSet as) {            super(context, as);            this.mContext = context;        }        private void reset() {            removeAllViews();            final ViewGroup.LayoutParams wrap = new ViewGroup.LayoutParams(                    ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);            for (int i = 0; i < NUM_CATS; i++) {                FlyingCat nv = new FlyingCat(getContext(), null);                addView(nv, wrap);                nv.z = ((float) i / NUM_CATS);                nv.z *= nv.z;                nv.reset();                nv.setX(randfrange(0, Board.this.getWidth()));                final AnimationDrawable anim = (AnimationDrawable) nv.getDrawable();                postDelayed(new Runnable() {                    public void run() {                        anim.start();                    }                }, (int) randfrange(0, 1000));            }            if (mAnim != null) {                mAnim.cancel();            }            mAnim = new TimeAnimator();            mAnim.setTimeListener(new TimeAnimator.TimeListener() {                public void onTimeUpdate(TimeAnimator animation, long totalTime, long deltaTime) {                    for (int i = 0; i < getChildCount(); i++) {                        View v = getChildAt(i);                        if (!(v instanceof FlyingCat))                            continue;                        FlyingCat nv = (FlyingCat) v;                        nv.update(deltaTime / 200f);                    }                }            });        }        @Override        protected void onSizeChanged(int w, int h, int oldw, int oldh) {            super.onSizeChanged(w, h, oldw, oldh);            post(new Runnable() {                public void run() {                    reset();                    mAnim.start();                }            });        }        @Override        protected void onDetachedFromWindow() {            super.onDetachedFromWindow();            mAnim.cancel();        }        @Override        public boolean isOpaque() {            return true;        }    }

少写了一行,源码下载地址:http://download.csdn.net/detail/zgz345/8247563

更多相关文章

  1. python list.sort()根据多个关键字排序的方法实现
  2. Android(安卓)重要知识学习整理
  3. Android(安卓)源码下载、编译以及编译自己的apk
  4. android ndk编译getevent
  5. Android(安卓)根据Video绝对路径获取其缩略图
  6. Android(安卓)2.1 源码结构分析
  7. Android(安卓)学习之Layout
  8. Android根据经纬度获取位置信息
  9. Android(安卓)源码编译make的错误处理

随机推荐

  1. Android(安卓)studio进阶之多语言/图片--
  2. Android简单实现屏幕下方Tab菜单的方法
  3. "浅谈Android"第一篇:Android系统简介
  4. Android(安卓)RxJava:这是一份全面 & 详细
  5. Android从按下开机键到启动发生了什么
  6. 使用Frida渗透Android(安卓)app
  7. Android(安卓)设计思想
  8. eclipse paho包对于ActiveMQ持久化订阅者
  9. 轻松理解 Android(安卓)Binder,只需要读这
  10. gRPC在Android中的应用、配置、生成文件