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

Android彩蛋效果,微信彩蛋效果的更多相关文章

  1. Android PopupWindow 仿微信弹出效果

    项目中,我须要PopupWindow的时候特别多,这个东西也特别的好使,所以我今天给大家写一款PopupWindow 仿微信弹出效果.这样大家直接拿到项目里就能够用了! 首先让我们先看效果: 那么我首 ...

  2. Android两个页面之间的切换效果工具类

    import android.annotation.SuppressLint; import android.app.Activity; import android.content.Context; ...

  3. 全面盘点当前Android后台保活方案的真实运行效果(截止2019年前)

    本文原作者“minminaya”,作者网站:minminaya.cn,为了提升文章品质,即时通讯网对内容作了幅修订和改动,感谢原作者. 1.引言 对于IM应用和消息推送服务的开发者来说,在Androi ...

  4. 《推送开发全面盘点当前Android后台保活方案的真实运行效果》

        登录 立即注册 TCP/IP详解 资讯 动态 社区 技术精选 首页   即时通讯网›专项技术区›推送开发全面盘点当前Android后台保活方案的真实运行效果(截止2 ...   帖子 打赏 分 ...

  5. DUILIB 实现微信气泡聊天效果

    最近由于项目原因,需要做一个产品内嵌的IM聊天系统.而且要象微信类似的效果:界面也要比较炫: 开始考虑用MFC,但MFC的控件自绘很麻烦,后来又考虑QT,倒是使用控件使用方便,但QT库太大,所以也放弃 ...

  6. Android中实现圆角矩形及半透明效果。

    注:本文由Colin撰写,版权所有!转载请注明原文地址,谢谢合作! 在做Android开发时,我们为了美观,有时候需要使用圆角矩形,或半透明之类的效果,在网页设计中很容易实现.但在Android开发中 ...

  7. Android 图片合成:添加蒙板效果 不规则相框 透明度渐变效果的实现

    Android 图片合成:添加蒙板效果 不规则相框 透明度渐变效果的实现 暂时还未有时间开发这效果,所以先贴出来. 先贴一张效果图,这是一张手机截屏: 左上方的风景图:背景图片 右上方的人物图:前景图 ...

  8. 实现了在android实现左右滑动切换界面的效果

    这是实现了在android实现左右滑动切换界面的效果,该效果的源码下载,请到源码天堂下载吧,喜欢的朋友可以研究一下. 布局文件 <?xml version="1.0" enc ...

  9. android使用TextView实现跑马灯的效果(1)

    android使用TextView实现跑马灯的效果 1.activity_main.xml <?xml version="1.0" encoding="utf-8& ...

随机推荐

  1. C++运算符重载——重载二元运算符

    1.重载二元操作符的方法 二元运算符又称为双目运算符,即需要2个操作数的运算符,例如 + - * / 等. 运算符重载可以分为3种方式:类的非静态成员函数.类的友元函数.普通函数. 例如有 2 个操作 ...

  2. libevent功能使用简介

    http://blog.csdn.net/happyanger6/article/details/7272324 1. 介绍 libevent是一个用来开发可扩展的网络服务器的事件通知函数库.当一个文 ...

  3. 一起简单写一下AIDL,入个门

    前话 最近接触了Android开发的一个新知识,AIDL(¬_¬因为到现在都没用过) 因此不断谷歌找资料找Demo,自己尝试写一下. 因为用AndroidStudio作为开发环境,期间遇到过许多问题, ...

  4. swift:入门知识之类和对象

    1.swift中使用class创建一个类.一个类的声明则是在类里作为常量或变量声明的,除了是在类的上下文中.在方法和函数中也是这么写的. 2.swift中使用init(...)作为初始化构造函数 3. ...

  5. 安卓自动化测试之MonkeyRunner环境的搭建

    最近在抽时间学习一些安卓自动化的知识,把学到东西都就记录下来,避免以后记性不好忘记,也方便对自己积累知识的查阅 MonkeyRunner是基于坐标点来操作控件的,你可以通过写python脚本来调用mo ...

  6. linux/shell 文本文件删除/删掉空行

    分别用sed awk perl grep 实现: sed '/^$/d' input.txt > output.txt #output file: output.txt sed -i '/^$/ ...

  7. leetcode:Lowest Common Ancestor of a Binary Search Tree

    Given a binary search tree (BST), find the lowest common ancestor (LCA) of two given nodes in the BS ...

  8. hibernate的各种保存方式的区别 (save,persist,update,saveOrUpdte,merge,flush,lock)等

    hibernate的保存hibernate对于对象的保存提供了太多的方法,他们之间有很多不同,这里细说一下,以便区别:一.预备知识:在所有之前,说明一下,对于hibernate,它的对象有三种状态,t ...

  9. Android应用加入微信分享

    一.申请你的AppID http://open.weixin.qq.com/ 友情提示:推荐使用eclipse打包软件最后一步的MD5值去申请AppID 二.官网下载libammsdk.jar包 ht ...

  10. R语言实战读书笔记(三)图形初阶

    这篇简直是白写了,写到后面发现ggplot明显更好用 3.1 使用图形 attach(mtcars)plot(wt, mpg) #x轴wt,y轴pgabline(lm(mpg ~ wt)) #画线拟合 ...