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在开始动画之前和加载图像之后更改 a 。

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 相同大小的框架布局,并将进度条和您的 imageview 放入您的 imageview 上方的同一视图中。加载图像后,将进度条的可见性更改为 View.GONE 或 View.INVISIBLE。它也可以在列表视图中公平使用,而不会出现任何内存问题。要实现自定义进度条,请使用此。

     <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>
于 2013-04-25T12:52:13.533 回答