これを機能させる方法は次のとおりです。AnimationDrawable を 1 つだけ使用し、コールバックを多重化します。ProgressBar は実際には何も追加しません。View に固執することもできます。Drawable の管理をバイパスする View のサブクラスを作成します。
public class Whirly extends View
{
Drawable image = null;
public Whirly(Context context, AttributeSet attr)
{
super(context, attr);
}
@Override
public void draw(Canvas canvas)
{
if (image!=null)
image.draw(canvas);
}
public void setImageDrawable(Drawable image)
{
this.image = image;
invalidate();
}
}
次に、何らかの形ですべての渦巻きを追跡するアクティビティを作成します。
public class Demo extends Activity implements Drawable.Callback
{
private Handler h;
private AnimationDrawable a;
private Whirly w0;
private Whirly w1;
private Whirly w2;
private Whirly w3;
public void onCreate(Bundle bundle)
{
...
h = new Handler();
a = (AnimationDrawable) getResources().getDrawable(R.drawable.mywhirly);
int width = a.getIntrinsicWidth();
int height = a.getIntrinsicHeight();
a.setBounds(0, 0, width, height);
w0 = (Whirly) findViewById(R.id.whirly0);
w1 = (Whirly) findViewById(R.id.whirly1);
w2 = (Whirly) findViewById(R.id.whirly2);
w3 = (Whirly) findViewById(R.id.whirly3);
w0.setImageDrawable(a);
w1.setImageDrawable(a);
w2.setImageDrawable(a);
w3.setImageDrawable(a);
a.setCallback(this);
a.start();
}
public void invalidateDrawable (Drawable who)
{
w0.invalidate();
w1.invalidate();
w2.invalidate();
w3.invalidate();
}
public void scheduleDrawable (Drawable who, Runnable what, long when)
{
h.postAtTime(what, who, when);
}
public void unscheduleDrawable (Drawable who, Runnable what)
{
h.removeCallbacks(what, who);
}
}