Konflikt zwischen contextmenu und gestures

K

Ken-Iso

Neues Mitglied
2
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 = 0; i < imgCount; i++) {
				img[i] = new ImageView(MenuFood.this);
				img[i].setPadding(MainMenu.IMGPAD, MainMenu.IMGPAD, MainMenu.IMGPAD, MainMenu.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 v, MotionEvent 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 menu, View v, ContextMenuInfo menuInfo) {
		super.onCreateContextMenu(menu, v, menuInfo);
		final MenuInflater mi = new MenuInflater(getApplication());
		mi.inflate(R.menu.imgcontext, menu);
	}

PHP:
// Gesture class
class MyGestureDetector extends SimpleOnGestureListener {
		@Override
		public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float 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;
		}
}
 
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.
 

Ähnliche Themen

M
  • MikelKatzengreis
Antworten
5
Aufrufe
118
swa00
swa00
M
Antworten
3
Aufrufe
149
moin
M
Laser5001
Antworten
3
Aufrufe
646
swa00
swa00
Zurück
Oben Unten