私はいくつかのカスタムクラスBitmapStorageを持っていますが、ビューなどには何もアタッチされていません。そして、アニメーションフレームを含む<animation-list>を含むborn_animation.xmlファイルがあります。
<animation-list oneshot="true" >
<item drawable="@drawable/frame01" />
<item drawable="@drawable/frame02" />
</animation-list>
Resourcesクラスを使用してxmlファイルからアニメーションをAnimationDrawableとしてロードし(すべての解析を行うため)、ビットマップを抽出してカスタムストレージクラスに配置します。
私が抱えている問題:
Resources res = context.getResources();
AnimationDrawable drawable = (AnimationDrawable)res.getDrawable(R.drawable.born_animation);
assertTrue( drawable != null ); <= fails! it's null
WTF?誰かが私にそれを説明できますか?コードは正常にコンパイルされます。すべてのリソースが用意されています。
別の方法を試しました-ImageViewを使用して解析を行います(開発ガイドで説明されているように)
ImageView view = new ImageView(context);
view.setBackgroundResource(R.drawable.born_animation);
AnimationDrawable drawable = (AnimationDrawable)view.getBackground();
assertTrue( drawable != null ); <= fails! it's null
結果は同じです。 nullドローアブルを返します。
何かのヒントをいただければ幸いです。
はい、原因を見つけました! :)
それは私の悪かった:私のanimation.xmlファイルの適切なフォーマットを持っていなかった:
これらを修正した後、res.getDrawable()は正しいAnimationDrawableインスタンスを返し始めました。
Resources.NotFoundExceptionをより正確に調べる必要があり、何が問題かを見つけるのはgetCause()です:)
ドローアブル
<animation-list xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:id="@+id/myprogress"
Android:oneshot="false">
<item Android:drawable="@drawable/progress1" Android:duration="150" />
<item Android:drawable="@drawable/progress2" Android:duration="150" />
<item Android:drawable="@drawable/progress3" Android:duration="150" />
</animation-list>
コード:
ImageView progress = (ImageView)findViewById(R.id.progress_bar);
if (progress != null) {
progress.setVisibility(View.VISIBLE);
AnimationDrawable frameAnimation = (AnimationDrawable)progress.getDrawable();
frameAnimation.setCallback(progress);
frameAnimation.setVisible(true, true);
}
見る
<ImageView
Android:id="@+id/progress_bar"
Android:layout_alignParentRight="true"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:src="@drawable/myprogress" />
これは、「xml」ディレクトリからリソースをロードするために使用できます。
Drawable myDrawable;
Resources res = getResources();
try {
myDrawable = Drawable.createFromXml(res, res.getXml(R.xml.my_drawable));
} catch (Exception ex) {
Log.e("Error", "Exception loading drawable");
}