Android 动画 6问6答
1.view 动画有哪些需要注意的?
答:view动画 本身比较简单。http://www.cnblogs.com/punkisnotdead/p/5179115.html 看这篇文章的第五问就可以了。
2.如何给viewGroup 子元素出场时增加动画效果?
答:以listview 为例。
<?xml version="1.0" encoding="utf-8"?>
<layoutAnimation xmlns:android="http://schemas.android.com/apk/res/android"
android:delay="0.5"
android:animationOrder="normal"
android:animation="@anim/viewanim"
>
</layoutAnimation>
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="1000"> <alpha android:fromAlpha="0.0"
android:toAlpha="1.0"></alpha>
<translate android:fromXDelta="500"
android:toXDelta="0"></translate> </set>
<ListView
android:id="@+id/lv"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layoutAnimation="@anim/lv_anim"></ListView>
看看效果:

3.如何给activity和fragment 设置切换效果?
答:activity:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="1000">
<alpha android:fromAlpha="0.0"
android:toAlpha="1.0"></alpha>
</set>
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="1000">
<alpha android:fromAlpha="1.0"
android:toAlpha="0.0"></alpha>
</set>
Intent intent=new Intent(MainActivity.this,OtherActivity.class);
startActivity(intent);
overridePendingTransition(R.anim.enter_anim,R.anim.exit_anim);
效果:

fragment差不多 就是要使用兼容包,setCustomAniamtions 即可。
4.使用属性动画需要哪些条件?
答:如果相对属性abc 来进行属性动画的操作的话,必须要提供setAbc方法。 如果动画没有提供初始值,还有提供getAbc方法
因为系统要取abc的初始值,取不到初始值肯定要报错。
除此之外就是 setAbc方法 必须要能对view的实际ui有改观,让人能感觉出来ui的变化,否则 属性动画可以运行 但是因为没有效果,
也是看不出来的
5.对Button的 width 属性使用属性动画,为什么无效?有哪些解决方案?
答:
@android.view.RemotableViewMethod
public void setWidth(int pixels) {
mMaxWidth = mMinWidth = pixels;
mMaxWidthMode = mMinWidthMode = PIXELS; requestLayout();
invalidate();
}
你看Button 明显虽然有setWidth方法 但是 这个方法里 并没有实际修改这个view的layout属性 所以当然是无效的。
解决方法:可以用一个类,间接的来提供get set 方法。
static class Wrapper
{
private View mTarget; public Wrapper(View target)
{
mTarget=target;
} public int getWidth()
{
return mTarget.getLayoutParams().width;
} public void setWidth(int width)
{
mTarget.getLayoutParams().width=width;
mTarget.requestLayout();
} }
bt=(Button)findViewById(R.id.iv);
final Wrapper wrapper=new Wrapper(bt);
bt.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) { ObjectAnimator.ofInt(wrapper, "width", 500).setDuration(5000).start();
}
也可以 用ValueAnimator 监听动画过程 然后在过程里修改view本身的属性值即可。
public void onClick(View v) {
ValueAnimator valueAnimator=ValueAnimator.ofInt(1,100);
valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
//为了简单 我们就线性变化就行了
private IntEvaluator mEvaluator=new IntEvaluator();
@Override
public void onAnimationUpdate(ValueAnimator animation) {
int currentValue=(Integer)animation.getAnimatedValue();
float fraction=animation.getAnimatedFraction();
bt.getLayoutParams().width=mEvaluator.evaluate(fraction,bt.getLayoutParams().width,500);
bt.requestLayout();
}
});
valueAnimator.setDuration(5000).start();
最后看看效果:

6.使用动画需要注意哪些要点?
答:1.帧动画 尽量别用,因为图片过多 过大时 就oom
2.如果你的动画是无限循环的,比如属性动画里面,那你activity退出的时候 记得 要把动画停掉 不然会memory leak
3.view动画 再说一遍是对view的 ui层也就是用户可感知的层面做了变化,实际ui的本质没有变。如果出现使用view动画 以后异常的现象,可以尝试调用clearAnimation 恢复正常。
4.动画要使用dp 别用px。
5.注意对3.0一下的api 兼容,不过个人建议 还是不要支持4.0以下的设备了2016年了。
6.开启硬件加速 对动画效率 有好处。
Android 动画 6问6答的更多相关文章
- Android Window 9问9答
1.简述一下window是什么?在android体系里 扮演什么角色? 答:window就是一个抽象类,他的实现类是phoneWindow.我们一般通过windowManager 来访问window. ...
- Android RemoteViews 11问11答
1.什么是RemoteView? 答:其实就是一种特殊的view结构,这种view 能够跨进程传输.并且这种remoteview 还提供了一些方法 可以跨进程更新界面.具体在android里面 一个是 ...
- Android动画效果之自定义ViewGroup添加布局动画
前言: 前面几篇文章介绍了补间动画.逐帧动画.属性动画,大部分都是针对View来实现的动画,那么该如何为了一个ViewGroup添加动画呢?今天结合自定义ViewGroup来学习一下布局动画.本文将通 ...
- OpenGL快问快答
OpenGL快问快答 本文内容主要来自对(http://www.opengl.org/wiki/FAQ)的翻译,随机加入了本人的观点.与原文相比,章节未必完整,含义未必雷同,顺序未必一致.仅供参考. ...
- Android动画学习(一)——Android动画系统框架简介
2015-11-09补充:Drawable Animation极有可能是Frame Animation 这几天在找工作,面试的时候被问到了Android动画,之前完全没接触过这部分,直接给懵了,当然其 ...
- Android 动画:你真的会使用插值器与估值器吗?
目录 目录 1. 插值器(Interpolator) 1.1 简介 定义:一个接口 作用:设置 属性值 从初始值过渡到结束值 的变化规律 如匀速.加速 & 减速 等等 即确定了 动画效果变 ...
- Android动画效果之Property Animation进阶(属性动画)
前言: 前面初步认识了Android的Property Animation(属性动画)Android动画效果之初识Property Animation(属性动画)(三),并且利用属性动画简单了补间动画 ...
- Android动画效果之初识Property Animation(属性动画)
前言: 前面两篇介绍了Android的Tween Animation(补间动画) Android动画效果之Tween Animation(补间动画).Frame Animation(逐帧动画)Andr ...
- Android动画效果之Frame Animation(逐帧动画)
前言: 上一篇介绍了Android的Tween Animation(补间动画) Android动画效果之Tween Animation(补间动画),今天来总结下Android的另外一种动画Frame ...
随机推荐
- Linux网络编程1——小端模式与大端模式
数据存储优先顺序的转换 计算机数据存储有两种字节优先顺序:高位字节优先(称为大端模式)和低位字节优先(称为小端模式).内存的低地址存储数据的低字节,高地址存储数据的高字节的方式叫小端模式.内存的高地址 ...
- JDK安装(windows/linux)
双击安装...安装之后需要进行一些相关的配置工作...下面是我自己总结的安装和配置步骤: (1)非Win7系统 第一步:安装jdk,下载地址:http://www.oracle.com/technet ...
- Install wxWidgets-3.0.2 on GNU/Linux Debian
转载自 http://www.binarytides.com/install-wxwidgets-ubuntu/ wxWidgets wxWidgets is an application devel ...
- dojo新建widget步骤----主要针对widget路径
一,新建目录 二,新建文件 三,写urtil widget代码 四,写RedTextDialog代码 五,写HTML代码 =====================如有不懂,结合http://blog ...
- Array.prototype.slice.call(document.querySelectorAll('a'), 0)
Array.prototype.slice.call(document.querySelectorAll('a'), 0)的作用就是将一个DOM NodeList 转换成一个数组. slice()方法 ...
- Ubuntu13.10 eclipse菜单栏无法下拉
Ubuntu13.10 eclipse菜单栏无法下拉 Ubuntu 13.10已经发布,从13.04升级成功后,发现Eclipse菜单栏点击后,不能展示下拉列表了,但是快捷键有效.这个应该算是Ubun ...
- Spring之在客户端访问RESTful业务
Spring之在客户端访问RESTful业务 RestTemplate 是客户端访问RESTful业务的核心类.在概念上与Spring其他的模板类相似,比如JdbcTemplate和JmsTempla ...
- C++:四种必须使用初始化列表情况
[c++]必须在类初始化列表中初始化的几种情况 1. 类成员为const类型 2. 类成员为引用类型 复制代码 #include <iostream> using namesp ...
- Linux系统文件的隐藏属性
linux系统的文件除了有普通rwx权限外还有一种隐藏权限,例如明明有权限删除某个文件却报错了. 或者仅能为某个文件追加内容而不能减少内容,遇到这种很‘奇怪’的文件,就要怀疑是文件被设置隐藏权限了. ...
- 转载-使用 Feed4JUnit 进行数据与代码分离的 Java 单元测试
JUnit 是被广泛应用的 Java 单元测试框架,但是它没有很好的提供参数化测试的支持,很多测试人员不得不把测试数据写在程序里或者通过其它方法实现数据与代码的分离,在后续的修改和维护上有诸多限制和不 ...