我的布局响应性有问题,问题与Picasso图像大小调整有关。我的空模板(不使用Picasso并将图像插入视图中)如下所示:
当Picasso开始将我的图像加载到中间视图时,它会调整边界(在调整大小和加载时我可以看到空白区域),如下所示:
下载图像并调整大小后,它会调整约束大小,最后它看起来像这样:
Picasso在约束之间留下了自由空间,因为链被设置为内部传播 - 这部分是正常的(当我将其更改为打包时我有相同的空间但在顶部和底部)我只是不想要这个免费毕加索产生的空间。有什么诀窍可以避免这种情况并实现这样的目标吗?也许我做错了什么?
我无法静态设置高度,因为我正在动态加载图像而我不知道它们的尺寸。
我尝试了许多选项和黑客,但没有成功。
源代码:
<android.support.constraint.ConstraintLayout
android:id="@+id/constraintLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:padding="6dp">
<android.support.constraint.ConstraintLayout
android:id="@+id/topWrapper"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:background="@drawable/border"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toTopOf="@+id/middleLayoutImage"
app:layout_constraintVertical_chainStyle="spread_inside">
(... not important code int his case ...)
</android.support.constraint.ConstraintLayout>
<ImageView
android:id="@+id/middleLayoutImage"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:adjustViewBounds="true"
android:background="@drawable/border"
android:padding="5dp"
app:layout_constraintBottom_toTopOf="@+id/middleLayoutText"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toBottomOf="@+id/topWrapper"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintVertical_chainStyle="spread_inside"/>
<TextView
android:id="@+id/middleLayoutText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/border"
android:padding="5dp"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@+id/middleLayoutImage"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintVertical_chainStyle="spread_inside"/>
(... not important code int his case ...)
</android.support.constraint.ConstraintLayout>
毕加索代码:
ImageView imageView = (ImageView) constraintLayout.findViewById(R.id.middleLayoutImage);
Picasso.with(imageView.getContext())
.load(pictureLink)
.placeholder(R.drawable.load_pixel)
.fit()
.centerInside()
.into(imageView);
感谢您提供帮助。
答案 0 :(得分:0)
尝试这个,如果有帮助
Picasso
.with(context)
.load(imageurl)
.resize(600, 200) // resizes the image to these dimensions (in pixel). does not respect aspect ratio
.into(imageViewResize);
答案 1 :(得分:0)
您可以使用Packed
的{{1}}个线性组。
注意:将TopAlign设置为整个链,置于顶部。
以下是代码:
<强> JAVA 强>
ConstraintLayout
<强> XML 强>
Picasso.with(this).load(inputurl).into(iv);
加载前的布局:
<强>输出强>
有关链式行为的更多信息https://medium.com/@nomanr/constraintlayout-chains-4f3b58ea15bb
另见官方网页https://developer.android.com/training/constraint-layout/index.html#constrain-chain
答案 2 :(得分:0)
我根据设备比例设置了imageview的高度和宽度 使用滑行来加载图像。
在布局文件中添加imageview
<ImageView
android:id="@+id/imageView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:scaleType="fitCenter"
android:adjustViewBounds="true"
android:layout_marginTop="5dp"/>
复制类文件中的以下代码
private void displayImage()
{
if (!theImagePath.isEmpty()) {
imageViewScanBusinessCard.setVisibility(View.VISIBLE);
Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
int width = size.x - 10;
imageViewScanBusinessCard.getLayoutParams().height = width / 2;
imageViewScanBusinessCard.getLayoutParams().width = width;
imageViewScanBusinessCard.requestLayout();
File file = new File(theImagePath);
if (file.exists()) {
loadImageWithGlide(this, imageView,
theImagePath);
}
}
}
public static void loadImageWithGlide(Context theCtx, ImageView theImageView, String theUrl) {
Glide.with(theCtx)
.load(theUrl)
.diskCacheStrategy(DiskCacheStrategy.NONE)
.skipMemoryCache(true)
.centerCrop()
.into(theImageView);
}
在app gradle中添加依赖项
compile 'com.github.bumptech.glide:glide:3.7.0'