1

私は2つのフレームアニメーションを同時に実行したいアプリに取り組んでいますが、動作していません....私のコードは次のとおりです....

ImageView Background, planet, info;
AnimationDrawable infoview, backgroundview;
@Override
public void onCreate(Bundle savedInstanceState){
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);
  Background = (ImageView) findViewById(R.id.imageView1);
  planet = (ImageView) findViewById(R.id.planet);
  //Background.setImageResource(R.drawable.friend_night_sky_31000);
  Log.w("debug", "planetanimation started");
  planetStart(R.drawable.earth, R.drawable.background);
  Log.w("debug", "planetanimation stoped");
  info = (ImageView) findViewById(R.id.info);
  info.setImageResource(R.drawable.earthinfo);
  Log.w("DEBUG", "which is null:image " + infoview + "or" + backgroundview);
}

public void planetStart(final int pid, final int bid){
  Thread timer = new Thread(){
    @Override
    public void run(){
      try{
        //Thread.sleep(time);
      } catch (Exception e){

      } finally{
        Infoview.this.runOnUiThread(new Runnable(){
          public void run(){
            planet.setBackgroundResource(pid);
            infoview = (AnimationDrawable) planet.getBackground();
            infoview.start();
            Background.setBackgroundResource(bid);
            backgroundview = (AnimationDrawable) Background.getBackground();
            backgroundview.start();
            Log.w("DEBUG", "which is null:image " + infoview + "or" + backgroundview);
          }
        });
      }
    }
  };
  timer.start();
}

なぜそれが機能しないのですか?

Edit1私の地球ファイルは次のとおりです

<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android" 
    >
   <item android:drawable="@drawable/earthframe1" android:duration="150" />
   <item android:drawable="@drawable/earthframe2" android:duration="150" />
   <item android:drawable="@drawable/earthframe3" android:duration="150" />
   <item android:drawable="@drawable/earthframe4" android:duration="150" />
   <item android:drawable="@drawable/earthframe5" android:duration="150" />
   <item android:drawable="@drawable/earthframe6" android:duration="150" />
   <item android:drawable="@drawable/earthframe7" android:duration="150" />
   <item android:drawable="@drawable/earthframe8" android:duration="150" />
   <item android:drawable="@drawable/earthframe9" android:duration="150" />
    </animation-list>

bgファイルは次のとおりです

<animation-list xmlns:android="http://schemas.android.com/apk/res/android" 
    android:oneshot="false">
    <item android:drawable="@drawable/bg_1" android:duration="150" />
   <item android:drawable="@drawable/bgimage2" android:duration="150" />
   <item android:drawable="@drawable/bgimage03" android:duration="150" />
   <item android:drawable="@drawable/bgimage4" android:duration="150" />
   <item android:drawable="@drawable/bgimage5" android:duration="150" />


</animation-list>
4

3 に答える 3

1

PlanetStartメソッドからスレッドを削除するか、Thread.sleep(1000);のような値を指定するよりも既存のコードを使用する場合の 2 つの解決策があります。 スレッドスリープでこの値を確認しましたが、もう1つうまくいきます最初のアニメーションが終了する前に2番目のアニメーションが開始されるのを避けます

于 2012-06-22T11:19:42.763 に答える
0

onCreateでアニメーションを開始することはできません(もちろん、これを行います)。これを注意深く読む必要があります(特に段落のある最後の例)。

于 2012-06-22T11:17:11.597 に答える
0

以下のコードを試してください

package org.sample;

import android.app.Activity;
import android.graphics.drawable.AnimationDrawable;
import android.os.Bundle;
import android.util.Log;
import android.widget.ImageView;

public class SampleActivity extends Activity
{

  ImageView Background, planet, info;


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

    Background = (ImageView) findViewById(R.id.imageView1);
    Background.setBackgroundResource(R.drawable.background);

    planet = (ImageView) findViewById(R.id.planet);
    planet.setBackgroundResource(R.drawable.earth);

    info = (ImageView) findViewById(R.id.info);
    info.setImageResource(R.drawable.earthinfo);

    AnimationDrawable BackgroundAnimation = (AnimationDrawable) Background.getBackground();

    BackgroundAnimation.start();

    AnimationDrawable PlanetAnimation = (AnimationDrawable) planet.getBackground();

    PlanetAnimation.start();

  }
}
于 2012-06-22T11:05:42.353 に答える