Android ImageView缩放冲突
我正在代码中创建Android ImageView缩放冲突,android,imageview,android-relativelayout,scaling,bounds,Android,Imageview,Android Relativelayout,Scaling,Bounds,我正在代码中创建ImageView: ImageView vlogo = new ImageView(v.getContext()); RelativeLayout.LayoutParams vlogoParams = new RelativeLayout.LayoutParams( RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutPara
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_访客视图(已添加到相对布局)的顶部
和底部
对齐,“缩放”图像。但我想它还没开始呢。在此代码之前的requestLayout不会改变任何东西。
通过这样做,我将ImageView的高度设置为tv_访客视图的高度。没关系。然而,宽度似乎保持原样
问题来了。宽度保持不缩放我这样做的方式是make.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>
问题是由于
Imageview
的缩放,因为默认情况下,Imageview正在使用。根据文件,FIT_CENTER执行以下操作:
计算一个将保持原始src纵横比的比例,但是
还将确保src完全适合dst。至少一个轴
(X或Y)将完全适合结果集中在dst内部
由于图像已调整大小并居中,因此在左侧和右侧都会看到额外的空间。为了避免将结果向右对齐的set ScaleType,可以解决这个问题
vlogo.setScaleType(ImageView.ScaleType.FIT_END);
您的
tv\u访客视图是什么
及其LayoutParams
是什么?您确定原始图像没有任何填充吗?它也是用Java创建的。这是一个文本视图,包含匹配父对象x换行内容。它位于0x0“锚定”视图的右侧。肯定没有填充物和边距。我甚至尝试在Java中设置它们(使用px2dp公式),但它没有解决这个问题,因为我根据屏幕得到了不同的结果。这是由RelativeLayout
中的一个错误造成的,因为它查询它的子项的默认度量值(仅限于它自己的大小约束),然后强制进行自己的修改,不查询给定子级约束的首选维度。作为一种解决方法,您可以将其包装在另一个容器中,这至少应该允许正确对齐(尽管容器的宽度将保持不变)。硬编码父母的身高也可以解决这个问题。我将在进一步探讨后添加一个答案。相关问题:。还可以看到关于它的OpenBug报告:这对我很有用。非常感谢。然而,它的左边似乎仍然有“看不见的边缘”。宽度保持不变,但img在其中向右移动。这与我无关,在多个屏幕上渲染效果很好。@BartLizak是的,会有不可见的边距,因为只有图像向右对齐,Imageview的宽度不会调整大小。为了避免这种情况,在将原始位图分配给ImageView之前,您需要调整其大小(Bitmap.createScaledBitmap
)。
vlogo.setScaleType(ImageView.ScaleType.FIT_END);