Android - imageview.setBackgroundResource问题

时间:2013-04-25 12:40:15

标签: android android-animation android-imageview

我有一个图像视图,我已设置为400dp(宽度)和300dp(高度)。此图像视图用于列表视图,我从URL加载图像。在加载图像的过程中,我会显示一个像动画一样的progess栏,其设置如下:

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文件。

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分:1)

来吧老兄。你这样做的时间更长。最好为您的目的使用自定义Progressbar。您需要做的是使用与Imageview相同大小的框架布局并放置进度条和放大器。将您的imageview放入imageview上方的同一视图中。加载图像后,将进度条的可见性更改为View.GONE或View.INVISIBLE。它可以在listviews中使用,也不会出现任何内存问题。要实现自定义进度条,请使用此选项。

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

您可以绘制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>