我正在尝试将相对布局中的自定义视图居中。此图像旋转,因此它需要位于布局的中心,因此它不会超出布局边界。现在它显示在左上角。这是我的代码:
container = (RelativeLayout) findViewById(R.id.lay_container);
bmap = BitmapFactory.decodeResource(this.getResources(), R.drawable.charlie_sheen);
rotate_view = new RotationView(this, bmap);
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
params.addRule(RelativeLayout.CENTER_IN_PARENT);
rotate_view.setLayoutParams(params);
container.addView(rotate_view);
这是我的相对xml布局
<RelativeLayout
android:id="@+id/lay_container"
android:layout_width="200dip"
android:layout_height="200dip"
android:layout_alignParentRight="true"
android:layout_below="@+id/txt_1"
android:layout_marginRight="45dp"
android:layout_marginTop="56dp"
android:padding="10dip" />
你有什么想法吗?我知道这个问题可能有一个简单的解决方案,但我似乎无法找到答案。将LayoutParameter设置为center应该将视图居中放置在右侧?
提前感谢您的任何帮助或建议
答案 0 :(得分:2)
总体而言,添加自定义视图的代码看起来是正确的。这可能是一个弱建议,但为了排除视图自定义可能导致的任何问题,您可以尝试以两种方式之一修改代码。
选项1:使用addRule()
的显式形式,即
params.addRule(RelativeLayout.CENTER_IN_PARENT, RelativeLayout.TRUE);
选项2:使用addView()
的显式形式,不要在视图本身上设置参数,即
//Omit the line above this one
container.addView(rotate_view, params);
除此之外,或许对自定义视图有一些洞察力,特别是它如何衡量自身(它不是试图填充父级)?
HTH
答案 1 :(得分:0)
好的Devunwired我会这样做。
以下是我如何使图像居中。
1)我使用BitmapDrawable setGravity(Gravity.CENTER)属性将图像置于画布中心。
2)我将RotationView置于我的相对布局中:
<RelativeLayout
android:id="@+id/image_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@+id/txt_1"
android:layout_centerHorizontal="true" >
<com.mobicartel.acceldatatester.RotationView
android:id="@+id/rotate_view"
android:layout_centerInParent="true"
android:layout_height="wrap_content"
android:layout_width="wrap_content" />
</RelativeLayout>
我将添加背景并告知您。 (现在图像根本没有显示。有时你需要向后退一步才能朝正确的方向走两个!)