Android-Frame Animation介绍

来源:互联网 发布:优化英文名 编辑:程序博客网 时间:2024/05/04 03:29

介绍:


引用:Frame动画是一系列图片按照一定的顺序展示的过程,和放电影的机制很相似,我们称为逐帧动画。Frame动画可以被定义在XML文件中,也可以完全编码实现。

继承关系介绍:

继承图片

从继承关系中可以看出来,其实AnimationDrawable就是一个绘画容器。使用时,将多个绘制出来的图片添加到AnimationDrawable中,再一帧帧的播放出来,从而达到动画效果。和一开始引用的介绍内容不谋而合。

AnimationDrawable类java方法介绍


AnimationDrawable方法 功能 addFrame(Drawable frame, int duration) 添加一个帧动画 getDuration(int i) 获得帧动画的时间 getFrame(int index) 获得指定索引的Drawable对象 getNumberOfFrames() 获得帧动画的总数 isOneShot() 帧动画是否只运行一次 isRunning() 帧动画是否处于运行状态 setOneShot(boolean onsShot) 设置帧动画是否只运行一次 setVisible(boolean visible, boolean restart) 设置帧动画是否可见 start() 运行帧动画 stop() 停止帧动画

AnimationDrawable的XML常用属性介绍


XML文件常用属性 功能介绍 android:drawable[drawable] 加载Drawable对象 android:duration[long] 每一帧动画的持续时间(单位ms) android:oneshot[boolean] 动画是否只运行一次,true运行一次,false重复运行 android:visible[boolean] Drawable对象的初始能见度状态,true可见,false不可见(默认为false)

java代码例子


添加四个ShapeDrawable类XML文件,分别如下:

anim_1.xml文件:

<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http://schemas.android.com/apk/res/android"    android:shape="rectangle">    <!-- solid指定形状的填充色,只有android:color一个属性 -->    <solid android:color="#f40c08" /></shape>

anim_2.xml文件:

<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http://schemas.android.com/apk/res/android"    android:shape="rectangle">    <!-- solid指定形状的填充色,只有android:color一个属性 -->    <solid android:color="#f4f408" /></shape>

anim_3.xml文件:

<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http://schemas.android.com/apk/res/android"    android:shape="rectangle">    <!-- solid指定形状的填充色,只有android:color一个属性 -->    <solid android:color="#08f410" /></shape>

anim_4.xml文件:

<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http://schemas.android.com/apk/res/android"    android:shape="rectangle">    <!-- solid指定形状的填充色,只有android:color一个属性 -->    <solid android:color="#0833f4" /></shape>

视图布局XML如下:

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:paddingBottom="@dimen/activity_vertical_margin"    android:paddingLeft="@dimen/activity_horizontal_margin"    android:paddingRight="@dimen/activity_horizontal_margin"    android:paddingTop="@dimen/activity_vertical_margin"    tools:context="com.example.abe.frameanimation.MainActivity">    <View        android:id="@+id/view"        android:layout_width="match_parent"        android:layout_height="match_parent"        android:text="Hello World!" /></RelativeLayout>

活动界面java代码如下

public class MainActivity extends AppCompatActivity {    private View view;    private AnimationDrawable rocketAnimation;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        view = (View) findViewById(R.id.view);        rocketAnimation = new AnimationDrawable();        Resources res = getResources();        Drawable drawable = res. getDrawable(R.drawable.anim_1, null);        rocketAnimation.addFrame(drawable, 500);        drawable = res. getDrawable(R.drawable.anim_2, null);        rocketAnimation.addFrame(drawable, 1000);        drawable = res. getDrawable(R.drawable.anim_3, null);        rocketAnimation.addFrame(drawable, 500);        drawable = res. getDrawable(R.drawable.anim_4, null);        rocketAnimation.addFrame(drawable, 1000);        rocketAnimation.setOneShot(false);        view.setBackground(rocketAnimation);    }    @Override    public boolean onTouchEvent(MotionEvent event) {        if (event.getAction() == MotionEvent.ACTION_DOWN) {            rocketAnimation.start();            return true;        }else if(event.getAction() == MotionEvent.ACTION_UP){            rocketAnimation.stop();            return true;        }        return super.onTouchEvent(event);    }}

XML例子


XML例子中,用到的Drawable图像,同样使用Java例子中用到的4个ShapeDrawable。在res/drawable文件夹下面创建AnimationDrawable的XML文件,命名为anim_frame.xml。

XML内容如下:

<?xml version="1.0" encoding="utf-8"?><animation-list xmlns:android="http://schemas.android.com/apk/res/android"    android:oneshot="false">    <item android:drawable="@drawable/anim_1" android:duration="1000" />    <item android:drawable="@drawable/anim_2" android:duration="200" />    <item android:drawable="@drawable/anim_3" android:duration="1000" />    <item android:drawable="@drawable/anim_4" android:duration="200" /></animation-list>

活动界面java代码如下

public class MainActivity extends AppCompatActivity {    private View view;    private AnimationDrawable rocketAnimation;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        view = (TextView) findViewById(R.id.textView);        view.setBackgroundResource(R.drawable.anim_frame);        rocketAnimation = (AnimationDrawable) textView.getBackground();    }    @Override    public boolean onTouchEvent(MotionEvent event) {        if (event.getAction() == MotionEvent.ACTION_DOWN) {            rocketAnimation.start();            return true;        }else if(event.getAction() == MotionEvent.ACTION_UP){            rocketAnimation.stop();            return true;        }        return super.onTouchEvent(event);    }}

注意事项


特别注意,AnimationDrawable的start()方法不能在Activity的onCreate方法中调运,因为AnimationDrawable还未完全附着到window上,所以最好的调运时机是onWindowFocusChanged()方法中。

转载


http://www.cnblogs.com/menlsh/archive/2013/01/01/2841393.html

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 手机直播没电了怎么办 淘宝退货卖家拒收怎么办 充的会员卡店家关门了怎么办 淘宝手机号码被注册了怎么办 淘宝不支持七天无理由退货怎么办 微信视频横屏怎么办 房子里潮气太重怎么办 淘宝不小心注销了怎么办 淘宝号不小心注销了怎么办 xp网络驱动没了怎么办 淘宝卖家客服态度差怎么办 怀孕吃辣椒喉咙好痛怎么办 淘宝店铺建议不要提交认证怎么办 淘宝买东西商家不退款怎么办 淘宝买东西商家不发货怎么办 在微信上买东西被骗了怎么办 新浪微博自动关注人怎么办 搜淘宝找不到关键词和店铺怎么办 小超市开在一起竞争太大怎么办 淘宝店铺被投诉盗图怎么办 充电宝ic坏了怎么办 淘宝店宝贝权重下降怎么办 淘宝卖家评分低怎么办 淘宝买东西客服不理人怎么办 支付宝本次交易嫌疑违规怎么办 支付宝一年的交易总额怎么办 交易关闭钱扣了怎么办 交易猫账号绑定支付宝打不开怎么办 拼多多涉假处罚怎么办 淘宝店铺重复铺货扣6分怎么办 帆布鞋子买大了怎么办 开淘宝店没销量怎么办 开淘宝店没有销量怎么办 淘宝买东西支付密码错了怎么办 淘宝登入密码忘记了怎么办 逛街时手机没电了怎么办 逛街手机没有电了怎么办 卖家拒收退回来怎么办 群英会奖池钱不够买超了怎么办 三星s8卡顿严重怎么办 三星s8变卡了怎么办