仿微信弹出“生日快乐”类动画
2016-01-04 17:30
1066 查看
仿微信弹出“生日快乐”类动画
今天看到微信的动画蛮有意思,刚好最近也在研究GUI绘图,于是写了个DEMO。其实不难,分为两部分处理就好了,其一是动画的子项Item:
该类动画少不了Random随机数,在初始化时创建
public void init(Context context) { //获取BitMap对象 mBitmap = BitmapFactory.decodeResource(context.getResources(), fallSrc); //初始化Random Random r = new Random(); //Item的横坐标 x = r.nextInt(parentWidth-mBitmap.getWidth()); //动画的加速度 accelerlateSpeed = ((100f + (float) r.nextInt(100)) / 100000f); //Item的纵左标 startY = r.nextInt(30); //计算Item动画总时间 int t = (int) Math.cbrt(parentHeight * 2 / accelerlateSpeed); //出现时间(随机) if (r.nextBoolean()) startTime = r.nextInt(t/2 ); }
然后是子项Item的动画逻辑
//出现时间逐渐接近 if (startTime > 0) { startTime-=1; return; } if (visible) { t += 1; //计算纵左标 y = (int) (accelerlateSpeed * t * t * t / 2)+startY; //超出屏幕高度则不再绘制 if (y >= parentHeight) visible = false; } }
每次绘制调用下面的方法就好了
public void draw(Canvas canvas) { if (visible&&y>0&&startTime==0) canvas.drawBitmap(mBitmap, x, y, mPaint); }
其二在控制类里面,使用子线程绘制
class AnimationThread extends Thread { @Override public void run() { //初始化 init(getContext()); while (running) { //动画逻辑部分 animationLogic(); postInvalidate(); try { Thread.sleep(1000/60); } catch (InterruptedException e) { e.printStackTrace(); } } } }
DEMO还用到了自定义属性 itemNum和fallSrc
其中itemNum代表子项的数目,默认20
fallSrc代表图片
例如:
<com.zmf.fallanimation.demo.FallAnimationView android:layout_width="wrap_content" android:layout_height="wrap_content" fall:itemNum="20" fall:fallSrc="@mipmap/ic_fall" />
demo下载地址
[http://download.csdn.net/detail/a279822581/9389578
相关文章推荐
- 社交巨头三国杀:微信、WhatsApp、Line到底有啥区别?
- 微信悄悄升级群聊功能:个人微信营销号的福音
- 突击部队拼多多
- 我是运营,我没有假期
- 如何做到日消息量100万的微信公众号?
- 论微信取消推送功能的可能性(原创)
- 微信的成功,靠的是QQ导流吗?
- 「Linux 中国」2018 微信文章排行榜
- Gifski:一个跨平台的高质量 GIF 编码器
- 模仿动画的放大缩小容器
- 微信服务号推送模板消息接口
- C#自定义函数NetxtString生成随机字符串
- C#对list列表进行随机排序的方法
- jQuery 1.9.1源码分析系列(十五)动画处理之缓动动画核心Tween
- Android中ViewFlipper的使用及设置动画效果实例详解
- jQuery实现美观的多级动画效果菜单代码
- C#生成不重复随机字符串类