zoukankan      html  css  js  c++  java
  • Android彩蛋效果,微信彩蛋效果

    根据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

  • 相关阅读:
    自定义异常
    this()和super()的区别
    Eclipse快速创建函数
    Eclipse的.java文件有蓝色三角符号
    可变数量参数
    近期的目标
    怎么在电脑右键的新建里面添加.md文件
    数组的排序(从小到大)
    Arrays类
    不用乘法计算乘法(快速计算)
  • 原文地址:https://www.cnblogs.com/zgz345/p/4164239.html
Copyright © 2011-2022 走看看