【发布时间】:2013-07-09 13:48:03
【问题描述】:
我不确定我的问题是否可以理解。我的布局中有一个Image 和一个ViewGroup。 ViewGroup 与 GridView 相当,我有可以拖放的项目。
现在我有兴趣将我的ViewGroup 的项目拖到图像上,但每次我尝试时,这些项目似乎都有较低的 z-index,因为消失在图像后面。
我已经在ViewGroup 及其项目上尝试了与bringToFront 的组合,但没有任何效果。现在我的问题是,是否甚至可以将viewgroups 项目放在viewgroups 兄弟姐妹的前面。有人有这方面的经验吗?
我的 xml 看起来像这样,其中GridView 是我的Viewgroup...图像资源和图像的可见性在代码中设置:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/relative_gridview_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:tag="@string/tag_fragment_GridView"
android:background="#FFF"
android:orientation="vertical" >
<ImageView
android:id="@+id/img"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:visibility="gone" />
<de.test.GridView
android:id="@+id/grid_view1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@id/img"
android:background="#FFF"
android:gravity="center"
android:numColumns="auto_fit"
android:stretchMode="none"
android:tag="grid_view_tag" >
</de.test.GridView>
编辑: 我使用 BaseAdapter 来显示布局,因为我有动态数量的页面,可以使用这个库 https://github.com/openaphid/android-flip 进行翻转。
我创建的布局如下:
public View loadView(final View view, final int position) {
final GridView dgv = (GridView) view
.findViewById(R.id.grid_view1);
dgv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(android.widget.AdapterView<?> arg0, View v,
int position, long arg3) {
// Simple click listener for the items...
}
});
dgv.getViewTreeObserver().addOnGlobalLayoutListener(
new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
if (Build.VERSION.SDK_INT < 16) {
dgv.getViewTreeObserver()
.removeGlobalOnLayoutListener(this);
} else {
dgv.getViewTreeObserver()
.removeOnGlobalLayoutListener(this);
}
int displayHeight = view.getHeight();
int displayWidth = view.getWidth();
dgv.initChilds(displayWidth, displayHeight,
2,
2);
} else {
mImage = (ImageView) view
.findViewById(R.id.img);
mImage.getLayoutParams().height = displayHeight / 2;
mImage.setImageResource(R.drawable.bild);
dgv.initChilds(displayWidth,
displayHeight / 2, 2,
2);
}
updateGridView();
}
});
mList.add(view);
return view;
}
initChilds()-方法确定视图组中每个项目的大小。当通过 longclick 选择它时,我想将视图组项目设置为前面。 longclicklistener 看起来像这样:
@Override
public boolean onLongClick(View view) {
draggedItem = getDraggedView(); draggedItem.bringToFront();
callback.bringGridToFront();
return true;
}
我尝试像这样把item放到最前面,但是不起作用……回调变量是baseadapter类的一个实例,它调用了bringGridToFront()-Method,目前执行如下代码:
public void bringGridToFront() {
View view = mList.get(mCurrentPage);
RelativeLayout rl = (RelativeLayout) view.findViewById(R.id.relative_gridview_layout);
GridView dgv = (GridView) view.findViewById(R.id.grid_view1);
rl.bringChildToFront(dgv);
}
【问题讨论】:
-
我想过这样的事情:gridView.bringToFront(); item.bringToFront();其中item是gridview的拖拽item...但是不起作用
-
我认为有一个bringchildtofront 功能。在您的情况下,您将不得不这样称呼它 (relative_gridview_layout).bringchildtofront(grid_view1)。
-
嘿克里斯托斯,感谢您的回答;)我已经尝试过您的建议,但不幸的是它不起作用...如果我尝试将视图组的一个孩子拖到图像上,它仍然存在背后
-
发布一些代码,也许你遗漏了一些在这里有人可能会看到并提供答案的东西......
-
发布一些代码,完成:D
标签: android foreground viewgroup siblings