转载请注明出处:王亟亟的大牛之路

之前在绘画的过程中提到了静态的旋转啊,缩放啊,平移等一些效果。那么自定义的View当然也有动态的效果也就是我们的Animation,常用的有三种

View Animation
Drawable Animation
Property Animation

这一篇讲一下简单的Drawable Animation。

Drawable Animation实现好是什么个样子呢?

帧动画,一张一张的图片,一次播形成动画的景象。

效果就是如此,把一帧一帧的图品相机播放,形成动画的效果。

Who to do?

简单的看你可以用handle然后诸如runOnUIThread来做这些事,但是view既然提供了这样的实现,那为什么不用呢?

首先,定义一个动画的xml(java代码运行,这里以XML声称为例),并且放在drable目录下

这里用的是back和positive做正放,倒放的事。

然后定义一下具体播放的图片内容以及持续时间

下面以倒播为例

<animation-list xmlns:android="http://schemas.android.com/apk/res/android"android:oneshot="true"><item
        android:drawable="@drawable/draw9"android:duration="500"/><item
        android:drawable="@drawable/draw8"android:duration="500"/><item
        android:drawable="@drawable/draw7"android:duration="500"/><item
        android:drawable="@drawable/draw6"android:duration="500"/><item
        android:drawable="@drawable/draw5"android:duration="500"/><item
        android:drawable="@drawable/draw4"android:duration="500"/><item
        android:drawable="@drawable/draw3"android:duration="500"/><item
        android:drawable="@drawable/draw2"android:duration="500"/><item
        android:drawable="@drawable/draw1"android:duration="500"/>
</animation-list>

再之后用按钮把动画开启,结束就OK了 十分简单

    @Overridepublic void onClick(View v) {int flag = v.getId();anim = (AnimationDrawable) animImageView.getDrawable();switch (flag) {case R.id.startAnim:animImageView.setImageResource(R.drawable.positive_anim);anim.start();break;case R.id.toppleAnim:animImageView.setImageResource(R.drawable.back_anim);anim.start();break;case R.id.stopAnim:anim.stop();break;}}

顺道再讲讲onWindowFocusChanged,在之前测绘图片大小的时候已经看到了他的身影,那么他是具体做什么的呢?

其实在我们Activity执行的初期像onStart, onResume, onCreate其实我们的整个页面并没有完成渲染,所以这也就是我们为什么无法获取控件的长宽。

当你的Activity一获得就会调用这个方法

@Overridepublicvoid onWindowFocusChanged(boolean hasFocus) { // TODO Auto-generated method stub super.onWindowFocusChanged(hasFocus);
}

我们知道onResume也是Activity获取屏幕焦点时会被调用,那么2者又有什什么区别呢?

我们通过实验,用代码的Log来解释二者的区别

  @Overrideprotected void onResume() {super.onResume();Log.d("--->onResume", "onResume");}@Overridepublic void onWindowFocusChanged(boolean hasFocus) {super.onWindowFocusChanged(hasFocus);Log.d("-->onWindowFocusChanged", "--->AnimActivity onWindowFocusChanged");if (hasFocus) {anim.start();}}@Overrideprotected void onPause() {super.onPause();Log.d("--->onPause", "onPause");}

进入Activity时

01-04 16:57:24.131 5129-5129/paintcanvasdemo.pro.wjj.paintcanvasdemo D/--->onResume: onResume
01-04 16:57:24.161 5129-5129/paintcanvasdemo.pro.wjj.paintcanvasdemo D/-->>onWindowFocusChanged: --->AnimActivity onWindowFocusChanged

Home退出时

01-04 16:58:33.581 5129-5129/paintcanvasdemo.pro.wjj.paintcanvasdemo D/--->onPause: onPause
01-04 16:58:33.601 5129-5129/paintcanvasdemo.pro.wjj.paintcanvasdemo D/-->>onWindowFocusChanged: --->AnimActivity onWindowFocusChanged

当然,其中还参杂着onStop,onRestart,onStart。但是只要我们的Activity产生了焦点层面的变化他都可以监听到,关键是,他已经做100%交互式的逻辑了,而部分内容在onResume这里还无法做到(没有完全渲染结束)。

源码地址:https://github.com/ddwhan0123/BlogSample/tree/master/PaintCanvasDemo

记得点个赞哦!

自定义View时,用到Paint Canvas的一些温故,简单的帧动画(动画一 ,quot;掏粪男孩Gifquot;顺便再提提onWindowFocusChanged)...相关推荐

  1. 自定义View时,用到Paint Canvas的一些温故,简单的帧动画(动画一 ,掏粪男孩Gif顺便再提提onWindowFocusChanged)

    转载请注明出处:王亟亟的大牛之路 之前在绘画的过程中提到了静态的旋转啊,缩放啊,平移等一些效果.那么自定义的View当然也有动态的效果也就是我们的Animation,常用的有三种 View Anima ...

  2. 自定义View时,用到Paint Canvas的一些温故,讲讲用路径绘画实现动画效果(基础篇 三)

    转载请注明出处王亟亟的大牛之路 上礼拜上了一篇关于动画的自定义View的文章,然后里面的实现是PathMeasure,然后这一部分貌似以前没有讲过,那么就再补一篇来介绍下这部分的知识(之前一篇的传送门 ...

  3. android 动画之漂移,[超棒]自定义View居然还能这样?用 Android 实现一条小金鱼游动动画...

    原标题:[超棒]自定义View居然还能这样?用 Android 实现一条小金鱼游动动画 前言 此篇中的小鱼动画是模仿国外一个大牛做的flash动画,第一眼就爱上它了,简约灵动又不失美学,于是抽空试着尝 ...

  4. 自定义View时,用到Paint Canvas的一些温故,讲讲平时一些效果是怎么画的(基础篇 一)...

    转载请注明出处王亟亟的大牛之路 之前也有一个类似于画板的操作,但是不够详细,这边先补上链接,有兴趣的小伙伴可以看看http://blog.csdn.net/ddwhan0123/article/det ...

  5. 自定义View时,用到Paint Canvas的一些温故,讲讲平时一些效果是怎么画的(基础篇 二,图像遮盖,Canvas静态变化)

    转载请注明出处:王亟亟的大牛之路 上一篇把简单的一些概念理一理,还画了个圈,那这一篇讲一下图像遮盖"Xfermode"和Canvas的旋转.平移等效果 Xfermode: Avoi ...

  6. 自定义View(二),强大的Canvas

    本文转自:http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2012/1212/703.html Android中使用图形处理引擎,2D部分是 ...

  7. 转载爱哥自定义View系列--Paint详解

    上图是paint中的各种set方法 这些属性大多我们都可以见名知意,很好理解,即便如此,哥还是带大家过一遍逐个剖析其用法,其中会不定穿插各种绘图类比如Canvas.Xfermode.ColorFilt ...

  8. Android使用自定义View时:Error inflating class错误的原因。

    当在布局文件里使用自定义的View的时候,出现Error inflating class错误的原因: 1.没有定义inflate需要的默认构造函数: eg:自定义View为TestView,需要定义T ...

  9. 自定义View时,用到Paint Canvas的一些温故,PropertyAnimation中的ValueAnimator(动画四,“大大姐”的旋转跳跃no.2)

    转载请注明出处王亟亟的大牛之路 这些天都在说画view,view的一些动画,不知不觉已经2个礼拜了,这篇是讲的之前漏说的ValueAnimator. 先补一下之间没有贴的Property Animat ...

  10. Android 自定义view时用到的TypedArray

    前言: 在自定义控件的时候,如果我们想额外的添加一些属性,就会用到TypedArray这个类,那么这个类是怎么得到的,以及怎么使用的,这里作个简单介绍. 创建自定义属性 首先创建values\attr ...

最新文章

  1. 2022-2028年中国清水混凝土行业供需策略分析及市场供需预测报告
  2. 雷军:小米二为何不用1300万像素相机_TechWeb
  3. ContentProvider源码分析(原)
  4. byte数组转字符串_leetcode刷题844比较含退格的字符串(带代码解析,带知识点回顾)...
  5. requests发送http请求
  6. 嵌入式产品开发设计需要考虑的问题总结
  7. REST HTTP中的POST PUT GET
  8. Android 一直往文件写数据_( 十 ) 小众但好用:通过 Google drive 备份与同步 Keepass 数据库...
  9. Centos查看用户登陆记录
  10. 大前端时代,从前端小工到架构师的进阶锦囊!
  11. 锐捷ap怎么设置_新房装修网络布线方案一:AC+AP模式,弱电箱只放光猫和集成AC...
  12. 一款纯HTML二次元响应式引导页
  13. 用Python写一个批量生成账号的函数(用户控制数据长度、数据条数)
  14. win10系统安装虚拟机
  15. 怎么取消wps云服务器_关闭手机版wps云服务器
  16. 一文搞懂深度学习中常用的优化算法
  17. python中的snip用法_腾讯mac截图软件Snip使用教程及常见问题
  18. 坚果pro2刷MIUI10
  19. Spring的事务控制
  20. 【最佳实践】瀚高数据库安全版v4.5.8非root用户运行的安装配置

热门文章

  1. MySQL数据库和实例简介
  2. Handler与线程通信(二)
  3. SQL_SERVER 导oracle(转)
  4. MOSS自带链接样式影响页面全局样式的解决办法
  5. Aiseesoft iPhone Unlocker for Mac解锁密码?详细教程
  6. 如何配置Mac OS X实现LAN唤醒?
  7. Spring2.5整合ActiveMQ 5.2(P2P文本消息)
  8. Ubuntu 12.04安装及配置vsftp步骤
  9. 《社交网站界面设计(原书第2版)》——3.6 指纹或Bio指纹
  10. 《黑客大曝光:移动应用安全揭秘及防护措施》一3.5 小结