Android ImageView 缩放冲突
Android ImageView scaling conflict
我在代码中创建 ImageView
:
ImageView vlogo = new ImageView(v.getContext());
RelativeLayout.LayoutParams vlogoParams = new RelativeLayout.LayoutParams(
RelativeLayout.LayoutParams.WRAP_CONTENT,
RelativeLayout.LayoutParams.WRAP_CONTENT);
vlogoParams.addRule(RelativeLayout.ALIGN_TOP,tv_visitor.getId());
vlogoParams.addRule(RelativeLayout.ALIGN_LEFT, tv_visitor.getId());
vlogoParams.addRule(RelativeLayout.ALIGN_BOTTOM, tv_visitor.getId());
vlogo.setLayoutParams(vlogoParams);
vlogo.setImageResource(R.drawable.star);
rl.addView(vlogo);
通过将图像与先前创建的 tv_visitor 视图(已添加到相对布局)的 TOP
和 BOTTOM
对齐,图像是 "scaled"。但我认为它还没有布局(?)。 .requestLayout 在此代码之前不会改变任何东西。
通过这样做,我将 ImageView 的高度设置为 tv_visitor 视图的高度。没关系。但是宽度似乎保持原始状态。
问题来了。宽度保持不变。 我这样做的方法是让 .setAdjustViewBounds(true); 不起作用。 那我应该如何进行?
根据评论中的要求,我提供更多信息:
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/news_scrollView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#ff000000"
android:scrollbars="none">
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/fragment_news2">
<View
android:id="@+id/anchor_n"
android:layout_width="0dp"
android:layout_height="0dp"
android:background="#ffbb00"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true" />
</RelativeLayout>
</ScrollView>
视图作为参数传递,布局通过以下方式获取:
RelativeLayout rl = (RelativeLayout) v.findViewById(R.id.fragment_news2);
问题是由于 Imageview
的缩放引起的,因为默认情况下 imageview 使用 ImageView.ScaleType.FIT_CENTER
。根据文档 FIT_CENTER 执行以下操作:
Compute a scale that will maintain the original src aspect ratio, but
will also ensure that src fits entirely inside dst. At least one axis
(X or Y) will fit exactly. The result is centered inside dst.
由于图像已调整大小并居中,您会在左侧和右侧看到额外的空间。为避免将 ScaleType 设置为 ImageView.ScaleType.FIT_END
,这反过来将结果右对齐将解决问题。
vlogo.setScaleType(ImageView.ScaleType.FIT_END);
我在代码中创建 ImageView
:
ImageView vlogo = new ImageView(v.getContext());
RelativeLayout.LayoutParams vlogoParams = new RelativeLayout.LayoutParams(
RelativeLayout.LayoutParams.WRAP_CONTENT,
RelativeLayout.LayoutParams.WRAP_CONTENT);
vlogoParams.addRule(RelativeLayout.ALIGN_TOP,tv_visitor.getId());
vlogoParams.addRule(RelativeLayout.ALIGN_LEFT, tv_visitor.getId());
vlogoParams.addRule(RelativeLayout.ALIGN_BOTTOM, tv_visitor.getId());
vlogo.setLayoutParams(vlogoParams);
vlogo.setImageResource(R.drawable.star);
rl.addView(vlogo);
通过将图像与先前创建的 tv_visitor 视图(已添加到相对布局)的 TOP
和 BOTTOM
对齐,图像是 "scaled"。但我认为它还没有布局(?)。 .requestLayout 在此代码之前不会改变任何东西。
通过这样做,我将 ImageView 的高度设置为 tv_visitor 视图的高度。没关系。但是宽度似乎保持原始状态。
问题来了。宽度保持不变。 我这样做的方法是让 .setAdjustViewBounds(true); 不起作用。 那我应该如何进行?
根据评论中的要求,我提供更多信息:
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/news_scrollView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#ff000000"
android:scrollbars="none">
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/fragment_news2">
<View
android:id="@+id/anchor_n"
android:layout_width="0dp"
android:layout_height="0dp"
android:background="#ffbb00"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true" />
</RelativeLayout>
</ScrollView>
视图作为参数传递,布局通过以下方式获取:
RelativeLayout rl = (RelativeLayout) v.findViewById(R.id.fragment_news2);
问题是由于 Imageview
的缩放引起的,因为默认情况下 imageview 使用 ImageView.ScaleType.FIT_CENTER
。根据文档 FIT_CENTER 执行以下操作:
Compute a scale that will maintain the original src aspect ratio, but will also ensure that src fits entirely inside dst. At least one axis (X or Y) will fit exactly. The result is centered inside dst.
由于图像已调整大小并居中,您会在左侧和右侧看到额外的空间。为避免将 ScaleType 设置为 ImageView.ScaleType.FIT_END
,这反过来将结果右对齐将解决问题。
vlogo.setScaleType(ImageView.ScaleType.FIT_END);