我将一个非常宽的图像放置在HorizontalScrollView中。
由于我将高度设置为0dp并添加了约束,因此ImageView / ScrollView的高度是动态的。
由于ImageView的缩放类型为fitStart,adjustViewBounds为true-正在调整图像的宽度。
XML:
<HorizontalScrollView
android:id="@+id/mapScrollView"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_marginBottom="10dp"
app:layout_constraintBottom_toTopOf="@id/playButton"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<android.support.constraint.ConstraintLayout
android:id="@+id/mapLayout"
android:layout_width="wrap_content"
android:layout_height="match_parent">
<ImageView
android:id="@+id/mapImage"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:adjustViewBounds="true"
android:scaleType="fitStart"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<com.gigi.testmap.activities.quest.QuestMapPathView
android:id="@+id/mapLinesView"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="@id/mapImage"
app:layout_constraintEnd_toEndOf="@id/mapImage"
app:layout_constraintStart_toStartOf="@id/mapImage"
app:layout_constraintTop_toTopOf="@id/mapImage" />
</android.support.constraint.ConstraintLayout>
</HorizontalScrollView>
我正在尝试获取ImageView的宽度(总宽度,可见和不可见部分)。获取ScrollView的总宽度也将有所帮助。
我的目标是将按钮放在地图顶部,并根据渲染的ImageView的宽度和高度计算出位置。
我正在使用Glide加载图像:
final ImageView mapImage = mActivity.findViewById(R.id.mapImage);
Glide.with(mActivity).load(R.drawable.fullmap).into(mapImage);
mapImage.getViewTreeObserver().addOnGlobalLayoutListener(new
ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
mapImage.getWidth(); // --> returns 0
mapImage.getViewTreeObserver()
.removeOnGlobalLayoutListener(this);
}
});
我尝试使用树视图查看器的全局布局侦听器获取宽度,但我得到的只是0。尽管高度正确返回了。
任何帮助将不胜感激, 非常感谢。
答案 0 :(得分:0)
我没有使用Glide的经验。
您正在设置所有视图/容器android:layout_height="0dp"
首先尝试将其更改为任何其他任意值或wrap_content
。
您没有附加尝试如何获得身高的代码。
您尝试过mapImage.getHeight()
答案 1 :(得分:0)
对于位图,我曾经采用这种方式
Glide.with(mContext())
.asBitmap()
.load(path)
.into(new SimpleTarget<Bitmap>() {
@Override
public void onResourceReady(Bitmap bitmap,
Transition<? super Bitmap> transition) {
int w = bitmap.getWidth();
int h = bitmap.getHeight()
}
});
答案 2 :(得分:0)
似乎第一次调用树视图全局布局侦听器后,图像无法完全渲染(我想是因为图像宽度很大)-我所做的是检查图像宽度,并且仅当大于0,请删除监听器,然后继续执行我的代码。
final ImageView mapImage = mActivity.findViewById(R.id.mapImage);
Glide.with(mActivity).load(R.drawable.fullmap).into(mapImage);
mapImage.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
if (mapImage.getWidth() > 0) {
mapImage.getViewTreeObserver().removeOnGlobalLayoutListener(this);
//continue width related code here
}
}
});
也许不是完美的解决方案,并且在显示图像之前会有一点延迟-但对于我的用例来说还可以。