毕加索显示的图像小于预期(预期尺寸的一半)

时间:2015-08-05 00:36:35

标签: android picasso

我正在使用Picasso从这样的网址加载图片并将其显示在我的Android应用中:http://image.tmdb.org/t/p/w185/A7HtCxFe7Ms8H7e7o2zawppbuDT.jpg

然而,问题在于它们显示原始尺寸的一半。我无法弄清楚原因。

直接在浏览器中加载上面的网址,即可获得图像185px x 278px

我在本地保存了一个图像,用作调试的虚拟图像。当我使用imageView.setImageResource(R.drawable.dummyimage);时,图像显示为正确的大小。 (对不起,我试图附上截图,但我的声誉不够高。)

但是,当我使用Picasso.with(mContext).load(mMoviePosterURL).into(imageView);加载图片时,它们的大小只有一半。 (如果可以,我会附上截图。)

这是我的ImageView:

<ImageView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/grid_item_imageview"
    android:src="@drawable/dummyimage">
</ImageView>

我的布局:

<GridView
    android:id="@+id/grid_view"
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:verticalSpacing="0dp"
    android:horizontalSpacing="0dp"
    android:stretchMode="columnWidth"
    tools:context=".MainActivityFragment"
    android:numColumns="auto_fit">
</GridView>

BaseAdapter中我的getView方法的完整代码:

public View getView(int position, View convertView, ViewGroup parent) {
            if (convertView == null) {
                imageView = new ImageView(mContext);
            } else {
                imageView = (ImageView) convertView;
            }

           //imageView.setImageResource(R.drawable.dummyimage);  for comparison

            if(mMoviePosterPaths!=null) {
                Picasso.with(mContext)
                   .load(mMoviePosterPaths[position])
                   .into(imageView);
            }
            return imageView;
        }

我找到了几个解决方法。一个是通过这样做:.resize(185*2,278*2),但我想避免在可能的情况下放大图像。

另一个是从提供图像的API调用更大的图像,但我觉得这样效率较低,因为它需要更多的数据。

四处寻找我没有找到这个问题的其他人,所以也许我只是在做一些愚蠢的事,但我很难过:(

我想这里的主要内容是我试图理解为什么imageView.setImageResource()Picasso {...}以不同的方式显示相同的图像。

谢谢

2 个答案:

答案 0 :(得分:1)

您将图像的大小调整为其原始大小的两倍。这就是图像只显示一半的原因。尝试删除

.resize(185*2,278*2)

或调整宽度和高度。

.resize(185,278)

在ImageView中添加

android:scaleType="fitXY"

希望这会有所帮助:)

答案 1 :(得分:0)

我遇到了同样的问题,但是在 android:scaleType="fitXY" 中使用 AppCompatImageView 属性我得到的大小与原始大小完全相同。

XML:

<androidx.appcompat.widget.AppCompatImageView
        android:scaleType="fitXY"
        android:id="@+id/student_photo_preview"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/student"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

JAVA 代码:

getPicassoUnsafeCertificate(context).load(student.getPhoto())
                            .fit()
                            .networkPolicy(NetworkPolicy.NO_CACHE)
                            .memoryPolicy(MemoryPolicy.NO_CACHE)
                            .placeholder(R.drawable.no_image)
                            .error(R.drawable.no_image)
                            .into(previewImage);

我使用了 getPicassoUnsafeCertificate() 自定义方法来关闭 SSL 验证检查(我不关心这部分,但我添加了额外的好处)。