Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android ImageView缩放冲突_Android_Imageview_Android Relativelayout_Scaling_Bounds - Fatal编程技术网

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);