0

URLから画像を読み込んで、スワイプして1つずつ表示しようとしています。私のスワイプコードはうまく機能しています。次に、ページのヘッダーとフッターを配置する必要があります。

ヘッダーとフッターは 10 秒以内に非表示にする必要があり、ユーザーが画面をタップすると再表示され、次の 10 秒で非表示になる必要があります。表示と非表示を行うためのハンドラー クラスを作成しました。両方のコードは別々に機能しているように見えますが、一緒に参加すると、スワイプが機能しません。

私のレイアウトでは、フッターとヘッダーを画像ビューの上に配置する必要があるため、xml ファイルは次のようになります。

<FrameLayout>
    <ImageView>    </ImageView>
    <RelativeLayout>
       <RelativeLayout
          android:layout_alignParentTop="true">
       </RelativeLayout>
       <RelativeLayout
          android:layout_alignParentBottom="true">
       </RelativeLayout> 
   </RelativeLayout>
</FrameLayout>

私のonTouchアクションは次のようになります

public boolean onTouchEvent(MotionEvent event) 
    {
        if (event.getAction() == MotionEvent.ACTION_DOWN)
        {
            System.out.println("Touch Down X:" + event.getX() + " Y:" + event.getY());
            hide_layout.setVisibility(View.VISIBLE);
            return super.onTouchEvent(event);
        }
        else if (event.getAction() == MotionEvent.ACTION_UP)
        {
            System.out.println("Touch Up X:" + event.getX() + " Y:" + event.getY());
            startProgress();
            return super.onTouchEvent(event);
        }
        else if (gestureDetector.onTouchEvent(event))
        {
            return true;
        }
        else
        {
            return false;
        }
    }

startProgress() はハンドラー クラスであり、相対レイアウトを再び非表示にします。

public void startProgress()
    {
        Runnable runnable = new Runnable()
        {
            @Override
            public void run()
            {
                try
                {
                    Thread.sleep(2000);
                }
                catch (InterruptedException e)
                {
                    e.printStackTrace();
                }

                handler.post(new Runnable()
                {
                    @Override
                    public void run()
                    {
                        hide_layout.setVisibility(View.INVISIBLE);
                    }
                });
            }
        };
        new Thread(runnable).start();
    }
4

1 に答える 1

0

何が問題なのかを見つけられるようにするには、いくつかの追加情報を提供する必要があります。

  • startProgress()メソッドは何をしていますか
  • ヘッダーやフッターでモーション イベント (またはクリック) を処理していますか?

一般的な注意点として、Android はモーション イベントをビュー階層に配信し、最後に追加されたものから開始し、それを消費する (true を返す) まで、または追加された最初のビューに到達するまで、順次移動することに注意してください。

したがって、レイアウトでは、フッターが最後に追加されたビューであるため、最初にモーションイベントを受け取り、その後にヘッダーが続き、前に消費されていない場合は imageView に配信された後にのみ発生します。

于 2012-10-15T11:47:15.857 に答える