1、帧动画

主要涉及到 AnimationDrawable 类。


(1)通过 XML 文件实现
现在drawable 目录下定义好 XML 文件(假设文件名为xml_name):

<?xml version="1.0" encoding="utf-8"?><animation-list     android:oneshot="true"    xmlns:android="http://schemas.android.com/apk/res/android">    <item        android:drawable="@drawable/a_0"        android:duration="100" />    <item        android:drawable="@drawable/a_1"        android:duration="100" />    <item        android:drawable="@drawable/a_2"        android:duration="100" />animation-list>

(android:oneshot=”false” ,这个oneshot 的含义就是动画执行一次(true)还是循环执行多次。)

然后用Java代码开启:

ImageView imageview = (ImageView) findViewById(R.id.imageview);imageview.setImageResource(R.drawable.xml_name);AnimationDrawable animationDrawable = (AnimationDrawable) imageview.getDrawable();animationDrawable.start();//animationDrawable.stop();

(2)只通过 Java 代码实现

AnimationDrawable animationDrawable = new AnimationDrawable();int[] mipmaps = new int[]{R.drawable.a_0,R.drawable.a_1,R.drawable.a_2};for (int i = 0; i < 3; i++) {    int id=mipmaps[i];    //或者使用下面方式,注意如果图片资源放在mipmap下时将drawable修改下    //int id = getResources().getIdentifier("a_" + i, "drawable",getPackageName());    Drawable drawable = getResources().getDrawable(id);    animationDrawable.addFrame(drawable, 200);}animationDrawable.setOneShot(false);imageView.setBackgroundDrawable(animationDrawable);animationDrawable.start();

2、补间画

补间动画又可以分为四种形式,分别是 alpha(淡入淡出),translate(位移),scale(缩放大小),rotate(旋转)。

主要涉及到 Animation 类。


通过 XML 文件实现时需要在res/anim/ 文件夹下定义相关文件。
可以是单独的以等标签实现的单独的动画,也可以使用使用set 标签将多个动画组合

<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android"    android:interpolator="@[package:]anim/interpolator_resource"    android:shareInterpolator=["true" | "false"] >    <alpha        android:fromAlpha="float"        android:toAlpha="float" />    <scale        android:fromXScale="float"        android:toXScale="float"        android:fromYScale="float"        android:toYScale="float"        android:pivotX="float"        android:pivotY="float" />    <translate        android:fromXDelta="float"        android:toXDelta="float"        android:fromYDelta="float"        android:toYDelta="float" />    <rotate        android:fromDegrees="float"        android:toDegrees="float"        android:pivotX="float"        android:pivotY="float" />    <set>        ...    set>set>

有涉及到:
Interpolator 主要作用是可以控制动画的变化速率 ,就是动画进行的快慢节奏。Android 系统已经为我们提供了一些Interpolator ,比如 accelerate_decelerate_interpolatoraccelerate_interpolator等。更多的interpolator 及其含义可以在Android SDK 中查看。同时这个Interpolator也是可以自定义的。

pivot 决定了当前动画执行的参考位置,这个属性主要是在translatescale 动画中,这两种动画都牵扯到view 的“物理位置“发生变化,所以需要一个参考点。而pivotXpivotY就共同决定了这个点;它的值可以是float或者是百分比数值。

然后在 Java 代码中:

Animation animation = AnimationUtils.loadAnimation(mContext, R.anim.xml_name);img = (ImageView) findViewById(R.id.img);img.startAnimation(animation);

另外也可以直接使用 Java 代码实现。
借助RotateAnimationAlphaAnimation等类。

具体请参考:
https://lrh1993.gitbooks.io/android_interview_guide/content/android/basis/animator.html


3、属性动画

主要涉及到 ObjectAnimator 和 AnimatorSet 类。

ObjectAnimator anim = ObjectAnimator.ofFloat(myView, "rotation", 0f, 360f);anim.setDuration(1000);anim.start();
ObjectAnimator anim = ObjectAnimator.ofFloat(myView, "alpha", 1.0f, 0.8f, 0.6f, 0.4f, 0.2f, 0.0f);anim.setRepeatCount(-1);anim.setRepeatMode(ObjectAnimator.REVERSE);anim.setDuration(2000);anim.start();

属性动画也是可以组合实现的:

通过 AnimatorSet

ObjectAnimator alphaAnim = ObjectAnimator.ofFloat(myView, "alpha", 1.0f, 0.5f, 0.8f, 1.0f);ObjectAnimator scaleXAnim = ObjectAnimator.ofFloat(myView, "scaleX", 0.0f, 1.0f);ObjectAnimator scaleYAnim = ObjectAnimator.ofFloat(myView, "scaleY", 0.0f, 2.0f);ObjectAnimator rotateAnim = ObjectAnimator.ofFloat(myView, "rotation", 0, 360);ObjectAnimator transXAnim = ObjectAnimator.ofFloat(myView, "translationX", 100, 400);ObjectAnimator transYAnim = ObjectAnimator.ofFloat(myView, "tranlsationY", 100, 750);AnimatorSet set = new AnimatorSet();set.playTogether(alphaAnim, scaleXAnim, scaleYAnim, rotateAnim, transXAnim, transYAnim);//set.playSequentially(alphaAnim, scaleXAnim, scaleYAnim, rotateAnim, transXAnim, transYAnim);set.setDuration(3000);set.start();

通过 PropertyValuesHolder 以及 ObjectAnimator.ofPropertyValuesHolder() 方法

PropertyValuesHolder translationX = PropertyValuesHolder.ofFloat("translationX", -200, -100, 100, 200, 300);PropertyValuesHolder scaleX = PropertyValuesHolder.ofFloat("scaleX", 1.0f, 2.0f);PropertyValuesHolder rotate = PropertyValuesHolder.ofFloat("rotation", 0f, 360f);PropertyValuesHolder rotationX = PropertyValuesHolder.ofFloat("rotationX", 0f, 180f);ObjectAnimator together = ObjectAnimator.ofPropertyValuesHolder(imageView, translationX, rotate, scaleX, rotationX);together.setDuration(3000);together.start();

具体请参考:
https://lrh1993.gitbooks.io/android_interview_guide/content/android/basis/animator.html

也可以通过 XML 文件实现:http://www.jianshu.com/p/87373134481b

更多相关文章

  1. 今天开始写android的照片浏览器(一)至返回所有图片文件
  2. Android工程内嵌资源文件的两种方法
  3. Android 动画之Tween动画详细讲解及java源码实现
  4. 删除androidAndroid递归方式删除某文件夹下的所有文件
  5. IntelliJ IDEA 如何导出安卓(Android)apk文件 详细教程
  6. Android属性动画—实现第三方登录的上拉展开,下拉隐藏
  7. Android xml application属性详解

随机推荐

  1. 解决使用android studio中的git update后
  2. 【乱】乱,乱,乱,android真乱!
  3. Android 辅助功能(无障碍)自定义开发类似微
  4. Android(安卓)Intent 常用的Flag
  5. 如何降低android应用程序的耗电量
  6. Android中Dialog设置外部点击事件
  7. android打开存储卡(TF卡\SD卡)中的sqlit
  8. 【转】Ubuntu下Adb调试Android找不到设备
  9. Android赢家密码(一)——什么是赢家密码
  10. Android智能指针 (sp & wp)