Android动画之一:Drawable Animation
16lz
2021-01-25
准备写几篇博客讲解Android的动画,首先介绍Android动画的整体轮廓。
Android动画主要分为三大类
- View Animation
- Drawable Animation
- Property Animation
Property Animation则没有以上View Animation的两个限制,Property Animation可以修改任何对象(View Object 或者 non-view Object)的任何属性,比如大小,旋转,颜色。并且,移动后的组件,位置也回跟随着改变。
Android官网推荐使用Property Animation,但是View Animation也有其优点:使用方便简单,所以当View Animation能方便快速地解决需求时,选择它也是不错的选择。
以上我们对Android动画有了一个整体的认识,接下来循序渐进,先介绍最容易学习的Drawable Animation。如上面所说,Drawable Animation是逐帧动画,那么使用它之前必须先定义好各个帧。我们可以通过代码定义,也可以使用xml文件定义,一般使用后者。如下:
其中android:oneshot=“true”表示该动画只播放一次,等于false时则循环播放。
DrawableAnimationDemo\res\drawable\loading.xml
<?xml version="1.0" encoding="UTF-8"?> -
-
-
-
-
-
-
-
-
-
以上xml文件与前面一个xml文件不大同,多了一个
+ =
再看主界面的activity文件,如下:
DrawableAnimationDemo\src\com\example\drawableanimationdemo\MainActivity.java
public class MainActivity extends Activity {private AnimationDrawable loadingAnimation;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);requestWindowFeature(Window.FEATURE_NO_TITLE);setContentView(R.layout.activity_main);//将该逐帧xml文件设置为ImageView的背景ImageView loadingImg = (ImageView) findViewById(R.id.loading);loadingImg.setBackgroundResource(R.drawable.loading);loadingAnimation = (AnimationDrawable) loadingImg.getBackground();}/** * 触摸屏幕,结束动画 */public boolean onTouchEvent(MotionEvent event) {if (event.getAction() == MotionEvent.ACTION_DOWN) {loadingAnimation.stop();return true;}return super.onTouchEvent(event);}/** * activity显示到屏幕则开启动画 */@Overridepublic void onWindowFocusChanged(boolean hasFocus) {// TODO Auto-generated method stubsuper.onWindowFocusChanged(hasFocus);if (hasFocus)loadingAnimation.start();}}
效果图如下,其中图片素材取材于OSchina的开源项目。
以上代码实现的功能是:activity一启动,则动画开始,触摸屏幕时动画停止,代码比较容易理解,唯一需要注意的是,不能在onCreate()方法中调用AnimationDrawable的start()方法,因为此时AnimationDrawable还未真正加载到界面中。所以,如果想启动界面就自动运行动画,可以在OnWindowFocusChanged(boolean hasFocus)中启动动画。
好了,只要掌握了这个例子,日常开发中Drawable Animation需要的知识已经足够。最后附上源码免费下载。
博客源码
更多相关文章
- 一款常用的 Squid 日志分析工具
- GitHub 标星 8K+!一款开源替代 ls 的工具你值得拥有!
- RHEL 6 下 DHCP+TFTP+FTP+PXE+Kickstart 实现无人值守安装
- Linux 环境下实战 Rsync 备份工具及配置 rsync+inotify 实时同步
- android中的保存数据方法
- 自定义平滑滑动页面的组件:DragableSpace
- Android(安卓)studio的安装、环境配置和使用方法
- Android(安卓)跨进程通信(一)
- 在xml文件的Preference标签中,用给标签加参数