Kann nicht touch-Ereignis erkannt auf einen Blick und click-Ereignis erkannt, die in einer übergeordneten Ansicht

Habe ich ein layout "layout_base', dass den Bildschirm ausfüllt, und einer untergeordneten Ansicht "zu Hause".
Ich setze eine OnClickListener auf die 'layout_base' einige Aktionen (schließen ein popup, wenn es geöffnet ist), und eine OnTouchListener auf 'home' um einige der anderen Aktion (übersetzen auf schleudern).

Mein Problem ist, dass ich nur die Aktion gemacht, wenn ich zurück true im onTouch Methode der 'home' - touch-listener. Wenn ich zurück false, onFling ist nicht genannt. Warum? Vom doc habe ich gelesen, dass dies nur bedeuten, dass das Ereignis konsumiert wird, also von meinem Verständnis, dass es nicht weitergegeben an andere Zuhörer.

Also:

  • wenn ich zurück true im onTouch, onFling aufgerufen wird, aber dann das onClick-in den onClickListener, der die übergeordnete Sicht auf 'layout_base' wird nicht genannt.
  • wenn ich zurück false im onTouch, onFling wird nicht genannt, aber dann das onClick-in den onClickListener, der die übergeordnete Sicht auf 'layout_base' bezeichnet wird.

Wie bekomme ich meine beiden onFling Erkennung arbeiten auf 'home' und meine onClick-Erkennung arbeiten auf 'layout_base'?

Dank Sie

layout_base = findViewById(R.id.layout_base);
layout_base.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) { 
        closePopup();  //never called
    }
});     

contentGestureDetector = new GestureDetector(new ContentGestureListener());
contentGestureListener = new View.OnTouchListener() 
{
    public boolean onTouch(View v, MotionEvent event) 
    {  
        contentGestureDetector.onTouchEvent(event);
        return true; //onFling only called if return true
    }
};

home.setOnTouchListener(contentGestureListener);

class ContentGestureListener extends SimpleOnGestureListener {

    @Override
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {


        final int SWIPE_MIN_DISTANCE = 120;
        final int SWIPE_MAX_OFF_PATH = 250;
        final int SWIPE_THRESHOLD_VELOCITY = 200; 

        if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH)
            return false;

        if(e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
            if(!mMenuOpen){                        
                mOpenMenuAnim.start();
                mMenuOpen = true;
            }
        }
        else if (e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
            if(mMenuOpen){ 
                mCloseMenuAnim.start();
                mMenuOpen = false;
            }
        }

        return false;
    }
}
können Sie fügen Sie Ihre gesamte Aktivität/layout sowie.

InformationsquelleAutor jul | 2012-04-03

Schreibe einen Kommentar