2

我想知道是否有办法让视图绘制在所有其他视图之上,即使它属于被其他视图覆盖的视图组?谢谢。

4

3 回答 3

2

我找到了解决我的情况的方法,但它仍然会在超出其边界的视图周围绘制一些黑色像素。似乎我必须将这些视图移动到覆盖我需要的区域的父视图......无论如何,如果有人想尝试它,这就是我所做的:

@Override protected void dispatchDraw(Canvas canvas)
{
    Rect clip=new Rect(); getDrawingRect(clip);
    int saveCount=canvas.save(Canvas.CLIP_SAVE_FLAG);
    canvas.clipRect(clip,Region.Op.REPLACE);
    super.dispatchDraw(canvas);
    canvas.restoreToCount(saveCount);
}

该函数属于包含我要在其父项强制执行的原始边界之外绘制的子视图的视图组。如果您想为视图使用不同的边界,可以将剪辑区域更改为任何内容。

于 2012-12-29T19:21:06.043 回答
0

我之前和你有同样的问题,现在我从这个帖子中得到了答案。 什么是android.widget.FrameLayout

Android 会将应用程序放置到一个框架布局中(它的 id 是 android.R.id.content),我们可以将其称为 ContentView。你可以通过'hierarchyviewer'看到它,它是/android-sdk/tools/下的一个工具,允许检查视图层次结构。您可以看到您的应用程序放置在 FrameLayout 中。

您可以从其当前视图组中删除任何视图并添加到 ContentView。因此它将放置在所有其他视图之上。

您可以执行以下操作:

//Remove view from current viewgroup
WebView mWebView = (WebView)findViewById(id);
ViewGroup currentParent = (ViewGroup)mWebView.getParent();
currentParent.removeView(mWebView);

//Add the view to ContentView(android.R.id.content)
FrameLayout contentView = (FrameLayout)this.getDecorView().findViewById(android.R.id.content);
FrameLayout.LayoutParams fl = new FrameLayout.LayoutParams(MATCH_PARENT,MATCH_PARENT);
contentView.addView(mWebView,fl);

希望这有帮助。

于 2012-12-29T12:54:49.173 回答
0

使用ViewGroup.bringChildToFront(View child). 虽然这在 a 中没有达到预期的效果LinearLayout,因为 Z 顺序直接链接到排序顺序,所以在这种情况下,它只是将 the 移动View到底部。

于 2012-12-30T10:48:07.463 回答