0

我正在使用 gridview 来显示 2 列图像列表。

我正在使用通用图像加载器从数据库中获取图像,效果很好,但是一旦图像被加载,并且“加载图像”占位符被替换,尺寸就会缩小到图像的实际尺寸,并且不会正确填充单元格。

占位符图像已正确放大,以填充可用宽度并包裹高度。所有图像的尺寸相同,需要放大或缩小,具体取决于屏幕尺寸。

这是列表项布局(更新,我也有一个文本视图,我认为这无关紧要,但谁知道..):

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

    <ImageView
        android:id="@+id/grid_gallery_item_imageView1"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_centerInParent="true"
        android:adjustViewBounds="true"
        android:scaleType="fitCenter"
        android:src="@drawable/loading_image" />

    <TextView
        android:id="@+id/grid_gallery_item_textView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/grid_gallery_item_imageView1"
        android:background="#50000000"
        android:ellipsize="end"
        android:gravity="center_vertical"
        android:maxLines="3"
        android:padding="8dp"
        android:text="Bacon ipsum."
        android:textColor="#ffffff"
        android:textSize="20sp" />

</RelativeLayout>

这是我的网格视图:

 <GridView
        android:id="@+id/grid_gallery_layout_gridView1"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:numColumns="2"
        android:stretchMode="columnWidth">

在我的 gridview 适配器中,我只是使用它来加载图像:

imageLoader.displayImage("db://" + item.imageId, holder.imageView, options);

选项:

options = new DisplayImageOptions.Builder().bitmapConfig(Bitmap.Config.RGB_565).showStubImage(R.drawable.loading_image)
        .displayer(new FadeInBitmapDisplayer(Constants.GRIDVIEW_IMAGE_FADEIN_TIME)).build();

这是问题的屏幕截图:

在此处输入图像描述

加载的图像应与占位符图像大小相同。

任何想法,为什么加载图像可能会破坏图像视图的大小?

编辑:缩小实际上工作正常,这是搞砸的放大。例如,在较小的屏幕上,图像大小正确。

4

2 回答 2

2

看来我已经解决了这个问题。如果 ImageView 在 gridview 内,显然 ImageView 不能正确放大图像。

这段代码非常适合我:link

于 2013-04-30T12:02:26.890 回答
1

我打赌你需要

android:scaleType="centerCrop"

并且不需要将单个 ImageView 放在 RelativeLayout

<ImageView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/grid_gallery_item_imageView1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_centerInParent="true"
    android:adjustViewBounds="true"
    android:scaleType="centerCrop"
    android:src="@drawable/loading_image" />

^ 如果正确重写适配器,则不需要 id 属性,例如

if (convertView == null) {
    convertView = inflater.inflate(id, null);
}
imageView = (ImageView) convertView;
于 2013-04-30T08:00:22.920 回答