У меня есть следующая структура макета в моем 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, вызывается onDraw()
MyDetailedView, а затем эти два вызываются снова. И только после этого сама форма становится недействительной.
В результате, это поведение заставляет форму мерцать, так как MyDetailedView
перерисовывает и скрывает форму на 10 мс или около того.
Вероятно, я упускаю из виду некоторую простую логику, но я действительно не могу понять, если есть способ заставить только один вид ViewGroup invalidate ().
Или, может быть, есть альтернативная структура / макет, который я мог бы использовать для своих целей?
Большое спасибо!
P.S.
Весь код достаточно большой, чтобы разместить здесь, но я готов вставить любые фрагменты по запросу