1. Nimm jetzt an unserem 2. ADVENT-Gewinnspiel teil - Alle Informationen findest Du hier!

Konflikt zwischen contextmenu und gestures

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von Ken-Iso, 22.11.2010.

  1. Ken-Iso, 22.11.2010 #1
    Ken-Iso

    Ken-Iso Threadstarter Neuer Benutzer

    Beiträge:
    6
    Erhaltene Danke:
    1
    Registriert seit:
    24.09.2010
    Hallo zusammen,

    ich habe eine Activity die ein Scollview enthält, dass mit ImageViews gefüllt ist. Ich möchte, dass bei einem Fling von rechts nach links die Activity beendet wird. Jeder der ImageViews ist für das Contextmenu registriert.

    Ich habe nun das Problem, dass nur etwa die hälfte der Flings erkannt werden, wenn die ImageViews für das contextmenu registriert sind. Entferne ich die Registrierung funktionieren die Flings wie geschmiert.

    Kann das Jemand nachvollziehen und mir vielleicht sogar einen Tip geben, wie ich das gelöst bekomme?

    Vielen Dank! :laugh:

    PHP:
    // ImageViews vorbereiten und gesture listener registrieren
    for (int i 0imgCounti++) {
                    
    img[i] = new ImageView(MenuFood.this);
                    
    img[i].setPadding(MainMenu.IMGPADMainMenu.IMGPADMainMenu.IMGPADMainMenu.IMGPAD);
                    
    img[i].setMaxHeight(imgH);
                    
    img[i].setMaxWidth(imgH);
                    
    img[i].setScaleType(ScaleType.FIT_XY);
                    
    img[i].setAdjustViewBounds(true);
                    
    img[i].setId(i);

                    
    img[i].setOnTouchListener(new View.OnTouchListener() {
                        @
    Override
                        
    public boolean onTouch(View vMotionEvent event) {
                            
    MenuFood.id v.getId();
                            
    MenuFood.tim System.currentTimeMillis();
                            if (
    gestureDetector.onTouchEvent(event))
                                return 
    true;
                            else
                                return 
    false;
                        }
                    });

                    
    img[i].setImageDrawable(dump[i].getDrawable());

    // Wenn ich diese Zeile auskommentiere funktioniert es
                    
    registerForContextMenu(img[i]);
                }
    PHP:
    // Contextmenu
        
    @Override
        
    public void onCreateContextMenu(ContextMenu menuView vContextMenuInfo menuInfo) {
            
    super.onCreateContextMenu(menuvmenuInfo);
            final 
    MenuInflater mi = new MenuInflater(getApplication());
            
    mi.inflate(R.menu.imgcontextmenu);
        }
    PHP:
    // Gesture class
    class MyGestureDetector extends SimpleOnGestureListener {
            @
    Override
            
    public boolean onFling(MotionEvent e1MotionEvent e2float velocityXfloat velocityY) {
                try {
                    if (
    Math.abs(e1.getY() - e2.getY()) > MainMenu.SWIPE_MAX_OFF_PATH) {
                        
    Log.e("Fling""Short");
                        return 
    false;
                    }
                    
    // right to left swipe
                    
    if (e1.getX() - e2.getX() > MainMenu.SWIPE_MIN_DISTANCE
                            
    && Math.abs(velocityX) > MainMenu.SWIPE_THRESHOLD_VELOCITY) {
                        
    finish();
                        return 
    true;
                    }
                } catch (
    Exception e) {
                    
    Log.e("Fling""Exception");
                }
                
    Log.e("Fling""None");
                return 
    false;
            }
    }
     
  2. JanF, 19.08.2011 #2
    JanF

    JanF Android-Experte

    Beiträge:
    594
    Erhaltene Danke:
    79
    Registriert seit:
    31.03.2011
    Bin bei der Recherche nach einer Lösung meinem Problem auf diesen Thread gestoßen und kann zumindest diese Problem lösen - vielleicht hilft es ja jemandem, der mit der Suchfunktion darauf stößt (sonst hätte ich keine Leichenfledderei betrieben).

    Du musste die onDown() Methode deiner MyGestureDetector Klasse so überschreiben, dass der Rückgabewert true ist, wenn das Kontextmenu nicht aufgerufen werden soll.
     

Diese Seite empfehlen