使用progressBar作为默认图像的自定义ImageView

时间:2013-08-29 10:32:43

标签: android imageview

在我的应用程序中,我有listView使用 LazyLoading 来显示图片。

但是在下载并显示实际图像之前,我希望ImageView显示加载动画而不是某些默认图像。

我想创建一个自定义imageView,其默认图像为ListDrawable,看起来像动画。但有没有更容易/更常见的方法来实现这一目标?

谢谢。

2 个答案:

答案 0 :(得分:0)

在每个列表项中都有一个进度条。每当您下载图像时,请隐藏此进度条[设置可见性GONE]。你的xml应该看起来像什么

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >

<ImageView
    android:id="@+id/imgToBeSet"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerInParent="true"
    android:contentDescription="@string/img_cont_desc_common" />

<ProgressBar
    android:id="@+id/imgProgress"
    style="?android:attr/progressBarStyleLarge"
    android:layout_width="wrap_content"
    android:layout_centerInParent="true"
    android:layout_height="wrap_content" />

<TextView
    android:id="@+id/textMsg"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignBottom="@+id/imgToBeSet"
    android:layout_centerHorizontal="true"
    android:visibility="gone"
    android:text="@string/msg_download_failed" />

</RelativeLayout>

答案 1 :(得分:0)

这是一个相当普遍的问题,可以通过使用其中一个可用的库来解决。当我需要类似的东西时,图书馆感觉有点沉重。

一个非常简单的解决方案是使用默认的加载微调器创建ImageView。现在你有一个装满微调器的ListView。接下来创建一个新的AsyncTask类,它接受一个URL并返回一个Bitmap。 Async任务完成后,使用myImageView.setImageBitmap(...);将结果分配给ImageView。例如。 (没有合理的错误检查等)

public class MyLazyBitmapLoader extends AsyncTask<String, Void, Bitmap> {
    private ImageView imageView;

    public MylazyBitmapLoader(final ImageView imageView) {
        this.imageView = imageView;
    }

    protected Bitmap doInBackground(String... urls) {
        String urldisplay = urls[0];
        Bitmap result = null;
        try {
            InputStream in = new java.net.URL(urldisplay).openStream();
            result = BitmapFactory.decodeStream(in);
        } 
        catch (Exception e) {
        ...
        }
        return result;
    }

    protected void onPostExecute(Bitmap result) {
        //handle null
        imageView.setImageBitmap(result);
    }
}

这可以很容易地扩展到包括其他功能,如缓存,其他资源加载等