FrameLayout中的冗余onDraw()调用

时间:2011-06-01 18:20:13

标签: android ondraw android-framelayout

我的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是一张地图(可绘制),MyDetailedView会在onTouch()上方弹出MyEntireView,并且只包含整个地图中的某一部分(也是可绘制的)更详细的用户在MyDetailedView中触及整个地图的区域。

当显示setVisibility(View.VISIBLE)时 - 即其@+id/focusedlayout - 顶部会出现一些透明形状(也包括一些位图),并且会定期重绘(例如,1秒间隔)。形状作为onDraw()的子项动态添加,因为它们总是有不同的数量,并且它们的位置与详细的地图图片相关。

问题是每次更新都会被多次处理。每次形状更新,然后调用MyEntireView的onDraw(),调用MyDetailedView的MyDetailedView,然后再调用这两个。只有在此之后,形状本身才会失效。

因此,此行为会使形状闪烁,因为{{1}}重绘并隐藏形状大约10ms左右。

我一定可能忽略了一些简单的逻辑,但如果有办法只强制一个ViewGroup的一个视图无效(),我真的无法得到。

或许我可以使用其他结构/布局来满足我的目的?

非常感谢!

P.S。 整个代码非常大,但我愿意根据要求插入任何部分

0 个答案:

没有答案