如何在 android ListView 中设置 ImageView 的宽度?

Posted

技术标签:

【中文标题】如何在 android ListView 中设置 ImageView 的宽度?【英文标题】:How to set ImageView width in android ListView? 【发布时间】:2015-12-14 09:45:33 【问题描述】:

列表视图代码

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_
android:layout_
android:padding="6dip">

<ImageView
    android:id="@+id/imageView"
    android:layout_
    android:layout_
    android:scaleType="fitCenter"
    android:adjustViewBounds="false"
    android:background="#F8F8F6"
    android:layout_alignParentEnd="false" />
.....
.....
</RelativeLayout>

我正在使用picasso 进行转换(转换与在此ImageView 上添加一些新图像有关)。

ListView 适配器代码

@Override
public View getView(int position, View convertView, ViewGroup parent) 
    LayoutInflater inflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
    if (null == convertView) 
        convertView = inflater.inflate(R.layout.list_view, parent, false);
    

    ImageTransform imageTransformation = new ImageTransform(context);


    ImageView imageView = (ImageView) convertView.findViewById(R.id.imageView);


    Picasso
            .with(context)
            .load("http://i.imgur.com/rFLNqWI.jpg")
            .transform(imageTransformation)
            .into(imageView);
 return convertview;

ImageTransformation 中的代码

 @Override
public Bitmap transform(Bitmap bitmap) 
    // TODO Auto-generated method stub
    synchronized (ImageTransform.class) 
        if(bitmap == null) 
            return null;
        
        Bitmap resultBitmap = bitmap.copy(bitmap.getConfig(), true);
        Bitmap bitmapImage = BitmapFactory.decodeResource(context.getResources(), R.drawable.ic_heart);
        Canvas canvas = new Canvas(resultBitmap);
        Paint paint = new Paint();
        paint.setAntiAlias(true);
        paint.setColor(Color.WHITE);
        paint.setStyle(Paint.Style.FILL);
        paint.setTextSize(50);
        paint.setShadowLayer(2.0f, 1.0f, 1.0f, Color.BLACK);

        canvas.drawText("$250", 10, 500, paint);
        canvas.drawBitmap(bitmapImage, 900, 20, null);
        bitmap.recycle();
        return resultBitmap;
    

根据上面我可以看到listView

问题

如何固定每张图片的大小,无论是否正确缩放,因为将来我会使用最佳布局? 如何增加图像的宽度。让图片宽度覆盖整个屏幕? 每当我处于landscape 模式时,就会发生失真。如何避免?

【问题讨论】:

在你的图像视图 XML 中尝试android:scaleType="centerCrop",它甚至会拉伸图像以适应 imageView 并且在图像列表中看起来更好 在横向模式下,专门为横向重新定义您的 UI,一个好主意是并排显示两个图像,这将解决两件事:->利用空间->合理的宽度缩放图像不会因过多的宽度缩放/拉伸而损失操作系统质量。 【参考方案1】:

如果您希望所有图像都具有特定尺寸,请使用 Picasso 库提供的 .resize() 函数并使用 .centerCrop() 很好地适应图像

Picasso.with(context)
 .load("http://i.imgur.com/rFLNqWI.jpg")
 .resize(100, 100) //Specify whatever size you want
 .centerCrop()
 .transform(imageTransformation)
 .into(imageView)

【讨论】:

当我使用 resize(size, size) 时,它没有加载任何图像。查看截图i.imgur.com/Vb9EjMQ.png 您是否尝试过使用其他图片链接,

以上是关于如何在 android ListView 中设置 ImageView 的宽度?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 android listview 中设置页脚以动态拉伸到底部?

Android在listview中设置单项背景颜色

Android中设置ListView内容刷新问题

在 Android 中设置 ListView 的“空白”区域的颜色

在 ListView 中设置页脚布局时出现问题

我在 android listview 中设置了 Enabled false 但 listview 不滚动