android - 我必须调整从 listView 中使用的服务器下载的图像的大小吗?

标签 android listview optimization image-resizing

我在滚动和 listItems 之间的空间时遇到滞后问题。如果有人可以提示我我的代码有什么问题,我将非常感谢。

当我的应用程序启动时,我从我的服务器下载所有缩略图并像这样保存它们:

FileOutputStream fos = openFileOutput(uniqueName, Context.MODE_PRIVATE);
fos.write(bytes);
fos.close();

所有图片都是 100px x 75px

列表项:

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

  <ImageView
    android:id="@+id/pic"
    android:layout_width="100dp"
    android:layout_height="75dp">
   </ImageView>

</RelativeLayout>

然后我像这样使用 asyncTask 加载图像:

private Drawable d;

@Override
protected Integer doInBackground(String... arg0) {
   File filePath = ctx.getFileStreamPath(fileName);
   if (filePath.exists()) {
       d = Drawable.createFromPath(filePath.toString());
       return 1;
   }
   return 0;
}

@Override
protected void onPostExecute(Integer success) {

    if (success == 1) {
        listener.onCacheThumbCompleted(d);
    }
}

最后将图片添加到listItem中的imageView中:

public void onCacheThumbCompleted(Drawable drawable) {

    iv.setImageDrawable(drawable);
}

但是滚动的时候一点都不流畅。此外,图像似乎没有完全填满 imageView。即使我将 dividerHeight 设置为 0,它也是 listItems 之间的空格。 Same problem他通过调整图片大小解决了这个问题,但我是否需要调整图片大小/缩放比例才能解决我的问题?

最佳答案

流畅的 ListView 在 Android 上可能相当复杂。我找到的最好的例子是 Shelves罗曼盖伊。它具有许多复杂的模式并且可能难以消化,但如果您确实消化了所有内容,那么当您从另一边出来时,您会变得更聪明 :)

列出一些最重要的增强功能:

  • 延迟加载图片
  • ViewHolder
  • 调整图片大小

您也可以搜索这些增强功能并自行实现。

关于android - 我必须调整从 listView 中使用的服务器下载的图像的大小吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17565190/

相关文章:

android - 如何为我的 Android 相机应用程序选择 ImageReader 缓冲区类型?

Android ListView 图像滞后

c# - 在 xamarin listview w 上更改选定的颜色

optimization - 创建临时变量以增强可读性

optimization - 如何在 AMPL 中重新定义运行之间的集合

java - android一键下多个事件

android - 自定义字体、MultiLine TextView 上的省略号、字形和故障

android - 在 fragment 中使用 YouTube API

java - 如何设置listadapter的View

optimization - Julia:如何模仿我们在 C++ 中使用的一些 "typedef/using"(并且没有性能损失)?