Android-Frame Animation介绍
来源:互联网 发布:优化英文名 编辑:程序博客网 时间:2024/05/04 03:29
介绍:
引用:Frame动画是一系列图片按照一定的顺序展示的过程,和放电影的机制很相似,我们称为逐帧动画。Frame动画可以被定义在XML文件中,也可以完全编码实现。
继承关系介绍:
从继承关系中可以看出来,其实AnimationDrawable就是一个绘画容器。使用时,将多个绘制出来的图片添加到AnimationDrawable中,再一帧帧的播放出来,从而达到动画效果。和一开始引用的介绍内容不谋而合。
AnimationDrawable类java方法介绍
AnimationDrawable的XML常用属性介绍
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
- Android-Frame Animation介绍
- Android Animation之frame animation
- Android动画--Frame Animation
- Android[动画] Frame Animation
- 【Android】Frame Animation
- Android Frame Animation
- android动画-Frame Animation
- android动画-Frame Animation
- Android Frame Animation
- android 动画 Tween animation Frame animation
- Animation---详解Android动画之Frame Animation
- Android 动画专题--- Frame Animation
- 【UX】Android动画 - Frame Animation
- Android 动画专题--- Frame Animation
- Android动画之Frame Animation
- [Android] Android frame by frame animation动画显示
- 详解Android动画之Frame Animation
- android中,如何创建Frame Animation?
- MVC中的View层
- 第三周项目3 输出星号图
- 会议纪要二:自主去优化你的代码,优化你的逻辑
- 小明的存钱计划
- Sicily 1013 Going Home
- Android-Frame Animation介绍
- POJ 3186
- LEETCODE 190
- Angular2 进阶
- 谁获得了最高奖学金
- JSP学习笔记
- Android-XML转成View过程简述
- BZOJ3781 小B的询问 题解&代码 【附莫队总结】
- python 异常