android:在RelativeLayout中保留属性子项动态添加ImageViews

时间:2013-11-02 00:29:10

标签: android android-layout imageview relativelayout android-custom-view

如何在动态添加ImageView时保留RelativeLayout中子项的属性?

我有一个自定义的ImageView我想在运行时添加到一个空的RelativeLayout(在XML中没有内容),我可以添加第一个,然后移动,缩放和旋转它们,它工作正常。 当我添加另一个ImageView时,所有先前添加的实例都会松开它们的位置和大小,但是当我触摸它们时,它们只返回它们的大小,而不是位置。

在我的ImageView中,我重写onDraw和onTouch,我是否需要覆盖其他内容? 也许我必须编写自己的RelativeLayout实现?我不会!

这是添加新ImageView的伪代码:

create new instance of ImageView
set bitmap
set scaletype
add imageview to the RelativeLayout container

我甚至尝试为全新添加的ImageView设置标准布局参数,结果相同。 我试图根据它的位置得到每个孩子的边距,并用ImgeView.setLayout(l,t,r,b)重新设置布局; 没有成功......

这是XML RelativeLayout容器,非常简单,可能太多了?

<RelativeLayout
        android:id="@+id/face_container"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" >
</RelativeLayout>

您需要更多详细信息来帮助我吗?请问,我也可以发布代码,但我必须先清理它,我明天可以做,同时请给我一些建议。

1 个答案:

答案 0 :(得分:0)

在RelativeLayout中,所有视图位置都与其他视图相关。因此,正如您在xml中所做的那样,您应该为每个视图提供相关参数 在将imageView添加到RelativeLayout调用setLayoutParams(layoutParams)

之前
// Create a new RelativeLayout.LayoutParams instance
RelativeLayout.LayoutParams layoutParams = 
   new RelativeLayout.LayoutParams(
       RelativeLayout.LayoutParams.WRAP_CONTENT,      
       RelativeLayout.LayoutParams.WRAP_CONTENT);

// add roules
layoutParams.addRule(RelativeLayout.CENTER_IN_PARENT);
layoutParams.addRule(.........
layoutParams.addRule(.........

//add params to view
imageView.setLayoutParams(layoutParams);

//add imageview to the RelativeLayout container
yourRelativeLayout.addView(imageView);

查看所有规则的here