安卓实现动画的3种方式

来源:互联网 发布:php pos点餐系统 编辑:程序博客网 时间:2024/06/08 06:50

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>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

(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();
  • 1
  • 2
  • 3
  • 4

(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();
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

2、补间画

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

主要涉及到 Animation 类。


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

宁波整形美容医院http://www.iyestar.com/
宁波整容医院http://www.lyxcl.org/

<?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>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28

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

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

然后在 Java 代码中:

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

另外也可以直接使用 Java 代码实现。 

借助RotateAnimationAlphaAnimation等类。






宁波整形美容医院www.iyestar.com

原创粉丝点击