欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

可绘制动画

程序员文章站 2022-03-01 15:08:20
...

可绘制动画可让您一个接一个地加载一系列Drawable资源来创建动画。 这是一个传统的动画,在它的意义上,它是用一系列不同的图像,按顺序播放,像一卷​​电影。 该AnimationDrawable类是可绘制动画的基础。

虽然你可以在你的代码中定义动画的帧,使用AnimationDrawable类的API,它更简单地与列出组成动画帧一个XML文件来实现的。 对于这种动画的XML文件所属的res/drawable/你的Android项目的目录中。 在这种情况下,指令是动画的每个帧的顺序和持续时间。

该XML文件包含一个的<animation-list>元素为根节点和一系列子<item>的每个限定一帧的节点:对于帧和帧持续时间的绘制资源。 下面是一个Drawable动画的示例XML文件:

<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot="true">
    <item android:drawable="@drawable/rocket_thrust1" android:duration="200" />
    <item android:drawable="@drawable/rocket_thrust2" android:duration="200" />
    <item android:drawable="@drawable/rocket_thrust3" android:duration="200" />
</animation-list>

此动画只运行三帧。 通过设定android:oneshot列表的属性设置为true,它会循环只有一次,然后停止并按住最后一帧。 如果它被设置为false,那么动画将循环。 与该XML保存为rocket_thrust.xmlres/drawable/项目的目录中,它可以被添加作为背景图像以一个视图,然后调用播放。 这里有一个例子活动,其中动画添加到一个ImageView ,然后当屏幕被触摸动画:

AnimationDrawable rocketAnimation;

public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);

  ImageView rocketImage = (ImageView) findViewById(R.id.rocket_image);
  rocketImage.setBackgroundResource(R.drawable.rocket_thrust);
  rocketAnimation = (AnimationDrawable) rocketImage.getBackground();
}

public boolean onTouchEvent(MotionEvent event) {
  if (event.getAction() == MotionEvent.ACTION_DOWN) {
    rocketAnimation.start();
    return true;
  }
  return super.onTouchEvent(event);
}

值得注意的是,它是重要的start()不能在期间调用叫上AnimationDrawable方法onCreate()的活性的方法,因为AnimationDrawable尚未完全附着到窗口。 如果你想立即播放动画,而不需要互动,那么你可能想从调用它onWindowFocusChanged()在你的活动方法,当Android将你的窗口,成为关注的焦点,这将被调用。

有关XML语法的详细信息,可标记和属性,看动画资源

转载于:https://www.jianshu.com/p/62e752588718

上一篇: spfa(模板)

下一篇: 选择排序