我有一个imageview。我想让它的宽度为fill_parent。我想让它的高等于宽度。例如:
<ImageView
android:layout_width="fill_parent"
android:layout_height="whatever the width ends up being" />
在布局文件中,不需要创建自己的视图类,这样的事情可能吗?
谢谢
我有一个imageview。我想让它的宽度为fill_parent。我想让它的高等于宽度。例如:
<ImageView
android:layout_width="fill_parent"
android:layout_height="whatever the width ends up being" />
在布局文件中,不需要创建自己的视图类,这样的事情可能吗?
谢谢
当前回答
下面是我解决这个问题的方法:
int pHeight = picture.getHeight();
int pWidth = picture.getWidth();
int vWidth = preview.getWidth();
preview.getLayoutParams().height = (int)(vWidth*((double)pHeight/pWidth));
preview - imageView,宽度设置为“match_parent”,scaleType设置为“cropCenter”
在imageView src中设置的位图对象。
这对我来说很有效。
其他回答
2021年7月28日更新,使用AndroidX而不是支持库
首先,确保你的项目导入了AndroidX,按照下面的说明操作。
然后将你的图像包装在一个ConstraintLayout中,它的字段如下:
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageView
android:layout_width="wrap_content"
android:layout_height="0dp"
app:layout_constraintDimensionRatio="1:1" />
</androidx.constraintlayout.widget.ConstraintLayout>
在这里看到的
我确实喜欢这个-
layout.setMinimumHeight(layout.getWidth());
下面是我解决这个问题的方法:
int pHeight = picture.getHeight();
int pWidth = picture.getWidth();
int vWidth = preview.getWidth();
preview.getLayoutParams().height = (int)(vWidth*((double)pHeight/pWidth));
preview - imageView,宽度设置为“match_parent”,scaleType设置为“cropCenter”
在imageView src中设置的位图对象。
这对我来说很有效。
ImageView "scaleType"函数可以帮助你。
这段代码将保持图像的纵横比和位置在顶部:
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:scaleType="fitStart"
这里有一个很棒的帖子展示了使用scaleType的可能性和外观。
ImageView scaleType样本
光靠布局是做不到的,我试过了。我最终写了一个非常简单的类来处理它,你可以在github上查看。它是一个更大项目的一部分,但一点复制和粘贴就能解决问题(在Apache 2.0下授权)
本质上,你只需要设置高度/宽度等于另一个维度(取决于你想缩放它的方式)
注意:您可以使用scaleType属性在不使用自定义类的情况下将其设置为正方形,但视图的边界超出了可见图像,如果将其他视图放置在其附近,则会产生问题。