0

Scale および Scroll イベントに応答するコントロールを含む 2 つのタブを持つ TabActivity があります。

最初にアプリを起動すると、タブ 1 で開始され、最初のタブのアクティビティに表示されるビューをスケーリングおよびスクロールできます。

再びタブ 2 に切り替えると、2 番目のタブのアクティビティに表示されるビューを拡大縮小およびスクロールできます。

すべてが良さそうです。

突然最初のタブに戻ると、拡大縮小もスクロールもできなくなります。もう一度2番目に戻すと、それは正常に機能します。タッチ フォーカスが 2 番目のタブのビューによって取得され、放棄されていないかのようです。

1 つのアクティビティがバックグラウンドになったときに GestureDetector が何らかの形で破壊された場合に備えて、GestureDetectors の再初期化も試みました。

次のコードを無駄に試しました:

public void onPause()
{
    super.onPause();
    mView.clearFocus();
}

public void onResume()
{
    super.onResume();
    mView.requestFocus();
    mView.InitGestureDetectors( this );
}

InitGestureDetectors は単純に次のことを行います。

public void InitGestureDetectors( Context ctx )
{
    mScaleGestureDetector   = new ScaleGestureDetector( ctx, new ScaleGestureListener() );
    mGestureDetector        = new GestureDetector( ctx, new GestureListener() );
}

その後タブを切り替えたときに、タッチジェスチャを再び機能させる方法を誰か教えてもらえますか?

4

1 に答える 1

0

私は最終的に私の問題の原因を突き止めました。これは、タブを変更したときに遷移アニメーションを作成するために使用されるカスタム OnTabChangeListener が原因でした。これにより、何らかの理由で、ビューがバックグラウンドに移動したときに可視性の状態が GONE に設定されませんでした。そこで、カスタム AnimationListener を追加して、onAnimationEnd と onAnimationStart で可視性フラグを適切に設定しました。

outAnim.setAnimationListener( new Animation.AnimationListener()
{
    public void onAnimationEnd( Animation animation )
    {
        outView.setVisibility( View.GONE );
    }

    public void onAnimationRepeat( Animation animation )
    {
    }

    public void onAnimationStart( Animation animation )
    {
        inView.setVisibility( View.VISIBLE );
    }
} );

そして今、私のタッチイベントは期待どおりに処理されています!

于 2013-01-23T23:41:05.927 に答える