0

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

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

我想创建一个imageView具有默认图像的自定义,ListDrawable它看起来像一个动画。但是有没有更简单/通用的方法来实现这一点?

谢谢你。

4

2 回答 2

0

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

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

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);
    }
}

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

于 2013-08-29T11:08:10.677 回答
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>
于 2013-08-29T10:39:07.030 回答