在我的应用程序中,我有listView
使用 LazyLoading 来显示图片。
但是在下载并显示实际图像之前,我希望ImageView
显示加载动画而不是某些默认图像。
我想创建一个自定义imageView
,其默认图像为ListDrawable
,看起来像动画。但有没有更容易/更常见的方法来实现这一目标?
谢谢。
答案 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);
}
}
这可以很容易地扩展到包括其他功能,如缓存,其他资源加载等