之前对Android动画这块一直是一知半解,知道个大概,并不会使用。刚好这几天没有太多的任务要做,可以梳理一下Android动画的一些知识。Android Animation的基础用法就不说了,这里主要记录下简单实用中遇到的问题。

1.XML中AnimationSet的某些属性有些问题。

  主要就是android:repeatCount,android:repeatMode无效。这个问题据说是Google的工程师刻意为之。【参考:http://stackoverflow.com/questions/4480652/android-animation-does-not-repeat】。

不过也有一些补救措施,比如可以给Animation设置AnimationListener。然后在onAnimationEnd()方法中,重新开始一遍动画即可。

2.AnimationSet的动画添加顺序问题。

  由于AnimationSet的addAnimation()方法添加的动画会按照添加动画的顺序进行矩阵变化等等处理,所以假设有一系列的动画(不只有一个变换位置的动画)作用于A上使得A转换成了B,那么如果想通过另外一系列动画使得B还转换成之前的A,最好保证前后两次转换的动画的顺序相同。比如图片image先后经过动画:a,b,c变换成image2,如果想再从image2变换成image,那么动画的顺序也需要a,b,c(当然这个前提是要有多个可能产生位置变化的动画)

举个例子:在XML中定义动画:先ronate、然后alpha、接着scale,最后translate。

<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android"     android:re    >    <rotate        android:duration="3000"        android:fromDegrees="0"        android:pivotX="50%"        android:pivotY="50%"        android:toDegrees="360" >    </rotate>    <alpha        android:duration="3000"        android:fromAlpha="1.0"        android:startOffset="0"        android:toAlpha="0.5" />    <scale        android:duration="3000"        android:fromXScale="1.0"        android:fromYScale="1.0"        android:pivotX="50%"        android:pivotY="50%"        android:toXScale="4"        android:toYScale="4" >    </scale>    <translate        android:duration="3000"        android:fromXDelta="0"        android:fromYDelta="0"        android:toXDelta="-100"        android:toYDelta="-800" >    </translate></set>

  如果需要在把动画还原,需要:

AlphaAnimation alphaAnimation = new AlphaAnimation(0.5f, 1.0f);RotateAnimation rotateAnimation = new RotateAnimation(360f, 0f,                Animation.RELATIVE_TO_SELF, 0.5f,Animation.RELATIVE_TO_SELF, 0.5f);ScaleAnimation scaleAnimation = new ScaleAnimation(4.0f, 1.0f,4.0f, 1.0f, Animation.RELATIVE_TO_SELF, 0.5f,Animation.RELATIVE_TO_SELF, 0.5f);TranslateAnimation translateAnimation = new TranslateAnimation(Animation.ABSOLUTE, -100,Animation.ABSOLUTE, 0,Animation.ABSOLUTE, -800,Animation.ABSOLUTE, 0);AnimationSet set = new AnimationSet( true);set.setInterpolator(new AccelerateDecelerateInterpolator());set.addAnimation(alphaAnimation);set.addAnimation(scaleAnimation);set.addAnimation(rotateAnimation);set.addAnimation(translateAnimation);set.setDuration(3000);

不然就有可能在转换的过程中,动画不流畅,出现闪动的现象。  

更多相关文章

  1. Android字节、十进制、十六进制、字符串之间的相互转换
  2. Android开发技术周报 Issue#43
  3. Android(安卓)- LayoutAnimation 动画效果 - 示例
  4. Android(安卓)分辨率 及 px, dip相互转换
  5. Android自定义view之围棋动画
  6. android隐藏View动画的注意事项
  7. Android实用视图动画及工具系列之三:表情加载动画和失败加载动画,
  8. Developers 设计之二 材料设计【翻译】
  9. 超酷的计步器APP(一)——炫酷功能实现,自定义水波纹特效、自定义炫

随机推荐

  1. MeeGo真的来了吗?
  2. Android快速开发框架_让前端更专注于前端
  3. 从源码角度分析Android中的Binder机制的
  4. Android后端服务器的搭建方法
  5. Android基于Socket无线遥控(1)--Socket基本
  6. android 自定义锁屏
  7. Android(安卓)ImageView 不显示JPEG图片
  8. Android手机蓝牙与单片机蓝牙串通信开发
  9. QQ空间手机版的十件不为人知的事
  10. Android实现动态高斯模糊效果示例代码