Android 如何在不调用bringToFront()的情况下将视图置于前端?

Android 如何在不调用bringToFront()的情况下将视图置于前端?,android,layout,view,z-index,viewgroup,Android,Layout,View,Z Index,Viewgroup,Android中显然存在一个破坏视图的漏洞。bringToFront 如果在GridView中排列视图,并希望通过调用bringToFront()将视图置于前面,则它可能会移动到GridView中的右下角位置 那里发生了一些可疑的事情,所以我不能使用bringToFront()。当我不打电话时,一切都很好。但是视图重叠-如果我使用缩放动画放大视图,它会被底部和右侧的视图部分遮挡 我已经检查了bringToFront的源代码,它调用parent.bringChildToFront(…) 就是这个方

Android中显然存在一个破坏
视图的漏洞。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