3

400dp(幅)と300dp(高さ)に設定した画像ビューがあります。この画像ビューは、URL から画像を読み込んでいるリスト ビューで使用されます。画像の読み込み中に、次のように設定されたアニメーションのような進行状況バーを表示します。

imageView.setBackgroundResource(R.drawable.progress);
            final AnimationDrawable startAnimation = (AnimationDrawable) imageView
                    .getBackground();

            startAnimation.start();

画像の読み込みが完了したら、このアニメーションを削除し、読み込まれた画像を次のように設定します。

imageView.setBackgroundResource(0);
            imageView.setImageBitmap(bitmap);

しかし、問題は、アニメーションも指定された幅と高さ、つまりそれぞれ 400dp と 300dp を取っていることです。どうすれば描画可能なアニメーションのサイズを単独で縮小できますか?

私のアニメーションファイル:progress.xml

<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/anim_black"
    android:oneshot="false" >

    <item
        android:drawable="@drawable/frame_1"
        android:duration="100"/>
    <item
        android:drawable="@drawable/frame_2"
        android:duration="100"/>
    <item
        android:drawable="@drawable/frame_3"
        android:duration="100"/>
    <item
        android:drawable="@drawable/frame_4"
        android:duration="100"/>
    <item
        android:drawable="@drawable/frame_5"
        android:duration="100"/>
    <item
        android:drawable="@drawable/frame_6"
        android:duration="100"/>
    <item
        android:drawable="@drawable/frame_7"
        android:duration="100"/>
    <item
        android:drawable="@drawable/frame_8"
        android:duration="100"/>
    <item
        android:drawable="@drawable/frame_9"
        android:duration="100"/>
    <item
        android:drawable="@drawable/frame_10"
        android:duration="100"/>
    <item
        android:drawable="@drawable/frame_11"
        android:duration="100"/>
    <item
        android:drawable="@drawable/frame_12"
        android:duration="100"/>

</animation-list>

フレーム1、フレーム2 ....フレーム12は、gif画像を分割して得たpngファイルです。

4

2 に答える 2

2

setImageResourceあなたの場合、アニメーションに使用する必要があります。背景画像は、画像全体に合わせて常にスケーリングされます。ScaleTypeまた、アニメーションを開始する前と画像がロードされた後にも変更する必要があります。

imageView.setImageResource(R.drawable.progress);
imageView.setScaleType(ScaleType.CENTER);

final AnimationDrawable startAnimation = (AnimationDrawable) imageView.getDrawable();
startAnimation.start();

// and once image is loaded
imageView.setImageBitmap(bitmap);
imageView.setScaleType(ScaleType.CENTER_INSIDE);
于 2013-04-25T12:49:25.480 に答える
1

さあ、おい。あなたはそれをより長い方法でやっています。目的に合わせてカスタム プログレスバーを使用することをお勧めします。必要なことは、Imageview と同じサイズのフレーム レイアウトを使用し、プログレス バーとイメージビューをイメージビューの上の同じビューに配置することです。画像が読み込まれたら、プログレスバーの可視性を View.GONE または View.INVISIBLE に変更します。リストビューでもメモリの問題なしでかなり使用できます。カスタム プログレスバーを実装するには、これを使用します。

     <ProgressBar
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:indeterminateDrawable="@anim/progress_bar_anim" >
      </ProgressBar>

yout drawable progress_bar_anim.xml の場所

 <?xml version="1.0" encoding="utf-8"?>
  <animated-rotate xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/pro_indi"
    android:pivotX="50%"
    android:pivotY="50%" />

pro_indi は、回転する円形の画像です。

<FrameLayout>
     <ImageView>
     <Progressbar>
</FrameLayout>
于 2013-04-25T12:52:13.533 に答える