帧动画未运行

时间:2011-07-02 21:23:57

标签: java android xml animation

我已经尝试了我可以找到的每个代码示例,它们定义并运行一个帧动画,但ImageView永远不会改变。 ImageView中的原始图像保留。

编辑: 经过多天的反复试验,我在手机而不是模拟器上运行了APK。 它适用于我的手机,但出于某种原因,它不在模拟器上。

3 个答案:

答案 0 :(得分:4)

我不清楚为什么你不能从onCreate线程开始动画,它们需要被发布到创建视图处理程序的任何线程。

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    final ImageView view = (ImageView) findViewById(R.id.shell);
    view.setVisibility(ImageView.VISIBLE);
    view.setBackgroundResource(R.drawable.animation_frame);

    view.post(new Runnable(){

      public void run(){
        AnimationDrawable frameAnimation =  (AnimationDrawable) view.getBackground();
        frameAnimation.start();
      }
    });
   }
}

我不知道为什么你需要这样做但是你这样做。

编辑:以下是我工作项目的片段应该是您需要的一切......

在onCreate中的

final ImageView image1 =  (ImageView) v.findViewById(R.id.coin1);
image1.post(new Runnable() {

        @Override
        public void run() {
            AnimationDrawable ani = (AnimationDrawable) image1.getBackground();
            ani.start();
        }
    });
xml布局中的

        <ImageView android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/coin"
        android:id="@+id/coin1"/>

coin xml:

<animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="false">
    <item android:drawable="@drawable/coin_spin_a" android:duration="100"/>
    <item android:drawable="@drawable/coin_spin_b" android:duration="100"/>
    <item android:drawable="@drawable/coin_spin_c" android:duration="100"/>
    <item android:drawable="@drawable/coin_spin_d" android:duration="100"/>
    <item android:drawable="@drawable/coin_spin_e" android:duration="100"/>
    <item android:drawable="@drawable/coin_spin_f" android:duration="100"/>
</animation-list>

答案 1 :(得分:0)

我也挣扎了一段时间。它在android框架动画教程中有解释,但让我们用“小写字母”说。让我从那里复制答案:

  

重要的是要注意,在Activity的onCreate()方法中,无法调用在AnimationDrawable上调用的start()方法,因为AnimationDrawable尚未完全附加到窗口。如果你想立即播放动画而不需要交互,那么你可能想从你的Activity中的onWindowFocusChanged()方法调用它,当Android让你的窗口成为焦点时会调用它。

它位于http://developer.android.com/guide/topics/graphics/view-animation.html#frame-animation

的最底部

答案 2 :(得分:0)

想要对schwiz答案添加评论。

我能够通过从工作线程调用Handler.post来实现它。以下是样本。

public void onCreate(Bundle savedInstanceState) {

    Thread t;
    final ImageView activityIndicator;
    final AnimationDrawable animiDrawable;
    LinearLayout contentPlaceholder;

    contentPlaceholder = (LinearLayout)this.findViewById(R.id.content_placeholder);
    activityIndicator = new ImageView(this);
    contentPlaceholder.addView(activityIndicator);
    activityIndicator.setBackgroundResource(R.drawable.ic_activity_indicator_bar);
    animiDrawable = (AnimationDrawable)activityIndicator.getBackground();

    t = new Thread(new Runnable() {
        @Override
        public void run() {
            mCbt.mThreadHandler.post(new Runnable() {
                @Override
                public void run() {
                    animiDrawable.start();
                }
            });
        };
    });
    t.start();
}