我在android中创建自己的自定义视图组。我有两个孩子。一个是linearLayout(它是第一个孩子,覆盖了屏幕的一半),上面有一些背景图像和按钮,另一个是View的扩展(它是第二个孩子并覆盖整个屏幕)我用手指画画。
我希望(第一个孩子)线性布局隐藏在视图的(第二个孩子)扩展名下面,以便我可以使用一些手势将第二个孩子滑动到右侧(有点像google,youtube的幻灯片) )并看到第一个孩子(LinearLayout)。问题出在 onLayout 里面我按照一定的顺序放置了孩子,但无论我做什么,第一个孩子(LinearLayout)总是在前面。
secondchild.layout(0,0,top,bottom);
firstchild.layout(0,0,top/2,bottom);
我也试过
firstchild.layout(0,0,top/2,bottom);
secondchild.layout(0,0,top,bottom);
但第一个孩子总是名列前茅。
Costume ViewGroup代码:
public class RootViewLayout extends ViewGroup {
private View mDrawView;
private View mSlideView;
private int mTop;
private int mDragRange;
public RootViewLayout(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
protected void onFinishInflate() {
mDrawView = findViewById(R.id.content_frame_white);
mSlideView = findViewById(R.id.slide_frame);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int widthSize = MeasureSpec.getSize(widthMeasureSpec);
int heightSize = MeasureSpec.getSize(heightMeasureSpec);
setMeasuredDimension(widthSize, heightSize);
}
@Override
protected void onLayout(boolean changed, int left, int top, int right, int bottom){
bringChildToFront(mDrawView);
mDrawView.layout(0, 0, right, bottom);
mSlideView.layout(0, 0, right/2, bottom);
}
}
XML代码:
<com.example.drawapp.RootViewLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/Root_View_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/white">
<com.example.drawapp.DrawView
android:id="@+id/content_frame_white"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/whitepaperwithcoffeestain">
</com.example.drawapp.DrawView>
<LinearLayout
android:id="@+id/slide_frame"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:background="@drawable/slidebackgrd"
android:orientation="vertical">
<Button
android:id="@+id/pen"
android:layout_width="100dip"
android:layout_height="wrap_content"
android:background="@drawable/pic"/>
</LinearLayout>
</com.example.drawapp.RootViewLayout>
当我不放
时 bringChildToFront(mDrawView);
空白被放置在适当的黑色背景下,但这不是我真正想要的。我希望用DrawView覆盖整个屏幕(背景为白色,上面有咖啡渍)。
是否有任何具体的方法告诉孩子们将其置于另一个之上?
答案 0 :(得分:5)
您需要更改子视图的z顺序。您应该使用bringChildToFront()
,即
parentLayout.bringChildToFront(secondChild);
但是,效果取决于父版面的类型(例如,如果它是LinearLayout
,则视图将被交换)。由于你覆盖了我猜它意味着它是RelativeLayout
,然后它应该可以正常工作。
我发现在您的情况下,您使用自定义ViewGroup
。如果只是为了达到&#34;全宽/半宽&#34;孩子们,那我建议换一个RelativeLayout
。添加secondchild
match_parent
和firstchild
作为中心0dp视图的右侧,如Adjust width to half screen
或者另一个可能更简单的选择就是改变孩子的可见度(VISIBLE或GONE)。