自己定义View时,用到Paint Canvas的一些温故,简单的帧动画(动画一 ,"掏粪男孩Gif"顺便再提提onWindowFocusChanged)
转载请注明出处:王亟亟的大牛之路
之前在绘画的过程中提到了静态的旋转啊,缩放啊,平移等一些效果。那么自己定义的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>
再之后用button把动画开启,结束就OK了 十分简单
@Override
public 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一获得就会调用这种方法
@Override
public
void onWindowFocusChanged(boolean hasFocus) {
// TODO Auto-generated method stub
super.onWindowFocusChanged(hasFocus);
}
我们知道onResume也是Activity获取屏幕焦点时会被调用。那么2者又有什什么差别呢?
我们通过实验,用代码的Log来解释二者的差别
@Override
protected void onResume() {
super.onResume();
Log.d("--->onResume", "onResume");
}
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
Log.d("-->onWindowFocusChanged", "--->AnimActivity onWindowFocusChanged");
if (hasFocus) {
anim.start();
}
}
@Override
protected 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的一些温故,简单的帧动画(动画一 ,"掏粪男孩Gif"顺便再提提onWindowFocusChanged)的更多相关文章
- 自己定义View时,用到Paint Canvas的一些温故,讲讲平时一些效果是怎么画的(基础篇 一)
转载请注明出处王亟亟的大牛之路 之前也有一个相似于画板的操作,可是不够具体,这边先补上链接.有兴趣的小伙伴能够看看http://blog.csdn.net/ddwhan0123/article/det ...
- 自己定义 View 基础和原理
课程背景: 在 Android 提供的系统控件不能满足需求的情况下,往往须要自己开发自己定义 View 来满足需求,可是该怎样下手呢.本课程将带你进入自己定义 View 的开发过程,来了解它的一些原理 ...
- 【Android】自己定义View、画家(画布)Canvas与画笔Paint的应用——绘图、涂鸦板app的实现
利用一个简单的绘图app来说明安卓的图形处理类与自己定义View的应用. 例如以下图,有一个供用户自己随意绘图.涂鸦的app. 这里不做那么花俏了,仅提供黑白两色.但能够改变笔尖的粗细. 实质上这里的 ...
- 安卓自己定义View进阶-Canvas之绘制基本形状
Canvas之绘制基本形状 作者微博: @GcsSloop [本系列相关文章] 在上一篇自己定义View分类与流程中我们了解自己定义View相关的基本知识,只是,这些东西依然还是理论,并不能拿来(zh ...
- 转载爱哥自定义View系列--Paint详解
上图是paint中的各种set方法 这些属性大多我们都可以见名知意,很好理解,即便如此,哥还是带大家过一遍逐个剖析其用法,其中会不定穿插各种绘图类比如Canvas.Xfermode.ColorFilt ...
- Android 它们的定义View (一)
转载请注明出处:http://blog.csdn.net/lmj623565791/article/details/24252901 非常Android入门程序员AndroidView.可能都是比較恐 ...
- Android自定义View研究--View中的原点坐标和XML中布局自定义View时View触摸原点问题
这里只做个汇总~.~独一无二 文章出处:http://blog.csdn.net/djy1992/article/details/9715047 Android自定义View研究--View中的原点坐 ...
- Android 它们的定义View它BounceProgressBar
转载请注明出处:http://blog.csdn.net/bbld_/article/details/41246247 [Rocko's blog] 之前几天下载了非常久没用了的桌面版酷狗来用用的时候 ...
- 图文剖析自己定义View的绘制(以自己定义滑动button为例)
自己定义View一直是横在Android开发人员面前的一道坎. 一.View和ViewGroup的关系 从View和ViewGroup的关系来看.ViewGroup继承View. View的子类.多是 ...
随机推荐
- Revit API改变风管及管件尺寸
start , , )) < , , -)) < , dHeight = ; ConnectorSetIterator csi = fi.MEPModel.Conn ...
- 移植Python3到TQ2440(二)
接着前一篇博文. 在上一篇博文中我们用NFS挂载根文件系统的方式启动了系统,接下来我们把移植了Python3的根文件系统固化到NandFlash中,但是由于linux-4.9目前不支持Yaffs2文件 ...
- 对一个前端使用AngularJS后端使用ASP.NET Web API项目的理解(4)
chsakell分享了一个前端使用AngularJS,后端使用ASP.NET Web API的项目. 源码: https://github.com/chsakell/spa-webapi-angula ...
- delphi中单独编译pas生成dcu文件
delphi中单独编译pas生成dcu文件 在网上下载了一个带源码的组件,结果碰到提示说缺少xxx.dcu.一看它的目录下确实没有,那能不能生成一个呢? 当然可以! 方法是使用delphi的安装目录\ ...
- javascript: break跳出多重循环以及退出each循环
先来看一个小例子: <html> <body> <script type="text/javascript"> for(j=0;j<2;j ...
- Fiddler抓包12-AutoResponder返回本地数据(mock)
前言 mock可以说是面试必问的话题的,我第一次接触mock的时候也是一脸懵逼.虽然fiddler工具用了很久,里面的打断点,设置自动返回数据功能都用过. mock说的通俗一点就是模拟返回数据,只是面 ...
- 本地docker搭建gitlab, 并配置ldap认证
基于Docker在Mac OS X系统中的部署和设置GitLab的具体过程如下: 1. 安装Docker for Mac (参见https://docs.docker.com/docker-for ...
- Eclipse with ADT的安装和使用
我们从安卓官方网站下载下来的eclipse是捆绑好了ADT的,所以不用自己安装插件. 我现在在这个目录下简历一个空的文件夹--virtual,用来来存放虚拟机. 然后,在我的电脑上右键->属性, ...
- 联想昭阳(Lenovo)
1996年,联想®昭阳系列推出了第一台笔记本电脑S5100.在经历了十几年的发展之后,联想昭阳系列也成为了国内市场占有率最高的国产商用笔记本品牌之一.昭阳品牌对于联想意义非凡,不仅仅是因为首款联想笔记 ...
- 转:PHP高效率写法(详解原因)
FROM : http://my.oschina.net/No5stranger/blog/157585#OSC_h3_1 1.尽量静态化: 如果一个方法能被静态,那就声明它为静态的,速度可提高1/4 ...