他のビューでカバーされているビュー グループに属している場合でも、ビューを他のすべてのビューの上に描画する方法があるかどうか疑問に思っていましたか? ありがとう。
3 に答える
私は自分の状況の解決策を見つけましたが、境界の外に描画されたビューの周りにいくつかの黒いピクセルを描画するという望ましくない効果がまだあります。結局、これらのビューを必要な領域をカバーする親ビューに移動する必要があるようです.
@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);
}
関数は、親によって強制された元の境界の外に描画したい子ビューを含むビュー グループに属しています。ビューに異なる境界を使用する場合は、クリップ領域を任意に変更できます。
以前も同じ質問がありましたが、今はこのスレッドから回答を得ています。 android.widget.FrameLayoutとは何ですか
Androidはアプリケーションをframelayout(その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);
これがお役に立てば幸いです。
を使用しViewGroup.bringChildToFront(View child)
ます。これは a では望ましい効果をもたらしませんがLinearLayout
、Z オーダーは並べ替え順序に直接リンクされているため、その場合はView
を一番下に移動するだけです。