我正在使用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 {...}
以不同的方式显示相同的图像。
谢谢
答案 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 验证检查(我不关心这部分,但我添加了额外的好处)。