Android 如何在不调用bringToFront()的情况下将视图置于前端?
Android中显然存在一个破坏Android 如何在不调用bringToFront()的情况下将视图置于前端?,android,layout,view,z-index,viewgroup,Android,Layout,View,Z Index,Viewgroup,Android中显然存在一个破坏视图的漏洞。bringToFront 如果在GridView中排列视图,并希望通过调用bringToFront()将视图置于前面,则它可能会移动到GridView中的右下角位置 那里发生了一些可疑的事情,所以我不能使用bringToFront()。当我不打电话时,一切都很好。但是视图重叠-如果我使用缩放动画放大视图,它会被底部和右侧的视图部分遮挡 我已经检查了bringToFront的源代码,它调用parent.bringChildToFront(…) 就是这个方
视图的漏洞。bringToFront
如果在GridView中排列视图,并希望通过调用bringToFront()将视图置于前面,则它可能会移动到GridView中的右下角位置
那里发生了一些可疑的事情,所以我不能使用bringToFront()。当我不打电话时,一切都很好。但是视图重叠-如果我使用缩放动画放大视图,它会被底部和右侧的视图部分遮挡
我已经检查了bringToFront的源代码,它调用parent.bringChildToFront(…)
就是这个方法
public void bringChildToFront(View child) {
int index = indexOfChild(child);
if (index >= 0) {
removeFromArray(index);
addInArray(child, mChildrenCount);
child.mParent = this;
}
}
它显然将视图从自身移除!毫不留情视图组是如此愚蠢,以至于它无法以洗牌控制的任何其他方式管理Z索引吗?显然,当GridView删除它的子对象,然后再将其添加回来时,它会被放置在网格的末尾
有什么我可以做的,以显示一个观点之上的其他不诉诸一些黑客?我想到的一件事是在GridView上创建另一个视图,它看起来会在我试图引入的GridView()上,但我不喜欢这个解决方案。你有没有尝试过使
视图可聚焦并调用requestFocus()?显然我错过了android:clipChildren=“false”
GridView中的属性。它解决了我的问题。调用bringToFront()会更改GridView中的顺序。尝试使用要设置动画的视图的图像创建ImageView,并改为设置动画
Bitmap bitmap = Bitmap.createBitmap(view.getWidth(), view.getHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
view.draw(canvas);
final ImageView imageView = new ImageView(getActivity());
imageView.setImageBitmap(bitmap);
ViewGroup.LayoutParams params = new ViewGroup.LayoutParams(view.getWidth() , view.getHeight());
imageView.setLayoutParams(params);
rootview.addView(imageView);
将动画侦听器添加到动画中,并删除动画末尾的ImageView。从API 21可以调用:
view.setZ(float)
如果目标API高于21,只需将属性android:translationZ=“xxx dp”
添加到XML中即可
请注意,如果在cardview等视图中添加立面,则进入Z轴。如果你想让一个视图以这种方式出现在前景中,你只需要使它高于你设定的高度
示例:cardview中的6 dp提升要求您希望前景的视图的属性translationZ中的7 dp