1

これが私のレイアウトです:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="1280dp"
    android:layout_height="800dp">


    <al.android.emcr.MainDisplay
        android:layout_width="1280dp"
        android:layout_height="800dp"/>
    <al.android.emcr.menu.MenuDisplay
        android:layout_width="1280dp"
        android:layout_height="114dp"/>

    <al.android.emcr.popups.ConfigurePopup.ConfigurePopup
        android:layout_width="1280dp"
        android:layout_height="800dp" />

</RelativeLayout>`

「MainDisplay」ビューをinvalidate() で更新すると、問題はありません。しかし、同じ方法で MenuDisplay を使用しようとすると、ビューが更新されません。私は何を間違っていますか?

注:どちらのビューにも「onDraw(Canvas)」メソッドが実装されています。

Note2:メインスレッドで invalidate() メソッドを呼び出します。ビューの1つが他のビューをオーバーレイしているという事実が、ビューの更新に悪影響を及ぼしているのではないかと思っています。

注 3: ( onTouch) イベントは両方のビューで正常に機能します。

4

1 に答える 1

0

わかりました私は私の問題を解決します: MenuDisplay クラスには2つのコンストラクターがありました:

public MenuDisplay(Context c, AttributeSet attrs) { super (c,attrs); init(c); }

それpublic MenuDisplay(Context c) { super(c); init(c); }

が私の問題を引き起こしたのは、両方の方法で init(c) を呼び出したことです。最善の解決策は、ネイティブ View メソッドで init メソッドを呼び出すことであると思います: onFinishInflate() 最終的には、最後のインフレ発生に対してのみ init を呼び出す静的カウンターを使用します (同じビューに対して多くのインフレが発生した場合) !

于 2012-09-30T07:55:48.987 に答える