私のxmlには次のレイアウト構造があります。
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/mainlayout"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<MyEntireView
android:id="@+id/map"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
</MyEntireView>
<FrameLayout
android:id="@+id/focusedlayout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom">
<MyDetailedView
android:id="@+id/focus"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
</MyDetailedView>
</FrameLayout>
</FrameLayout>
MyEntireView
はマップ (Drawable) であり、そのMyDetailedView
上にポップアップし、onTouch()
マップ全体 (Drawable) の特定の部分のみを含み、ユーザーが でマップ全体に触れた領域をより詳細に表示しますMyEntireView
。
が表示されている場合MyDetailedView
、つまり、そのsetVisibility(View.VISIBLE)
上にいくつかの透明な形状 (いくつかのビットマップも) が表示され、定期的に (たとえば、1 秒間隔で) 再描画されます。@+id/focusedlayout
形状は常に異なる数が存在し、それらの位置は詳細な地図画像に関連しているため、形状は の子として動的に追加されます。
そして問題は、各更新が複数回処理されることです。シェイプが更新onDraw()
されるたびに、MyEntireView が呼び出され、MyDetailedViewonDraw()
が呼び出され、これら 2 つが再度呼び出されます。そして、この後にのみ形状自体が無効になります。
その結果、この動作により形状がちらつきます。これは、MyDetailedView
形状が再描画されて 10 ミリ秒程度非表示になるためです。
おそらくいくつかの単純なロジックを見落としているに違いありませんが、ViewGroup の 1 つのビューのみを強制的に無効化する方法があるかどうかはわかりません。
または、目的に合わせて使用できる別の構造/レイアウトがあるのでしょうか?
どうもありがとう!
PSコード全体をここに置くにはかなり大きいですが、リクエストに応じて任意の部分を挿入します