Jetzt kostenlos registrieren. Mitglieder surfen ohne Werbung auf Android-Hilfe.de!
Zurück   Android-Hilfe.de > Android Developer > Android App Entwicklung

ListView Item Fling Gesture

Das Thema "ListView Item Fling Gesture" befindet sich unter Android App Entwicklung auf Android-Hilfe.de.


Antwort

 

Themen-Optionen Ansicht
Alt 26.06.2011, 15:56   #1 (permalink)
Erfahrener Benutzer
 
Benutzerbild von MetBo

Modell: Galaxy S i9100

Registriert seit: 14.05.2010
Beiträge: 278
Abgegebene Danke: 9
Erhielt 5 Danke für 5 Beiträge
Standard ListView Item Fling Gesture

Hallo,

ich habe in meiner App eine ListView, in der ich gerne die "Fling Gesture" einbauen möchte. Dabei soll nicht die gesamte ListView angesprochen werden, sondern nur einzelne Einträge (wie in der Twitter-App, wenn man nach rechts oder links swipt).

Um dies umzusetzen, habe ich mir gedacht, dass ich in jedem Eintrag ein ViewFlipper einbaue und über den Adapter die Gesten steuere.

Code:
package com.scibli.audio.recorder.utils;

import java.util.ArrayList;

import android.content.Context;
import android.util.Log;
import android.view.GestureDetector;
import android.view.GestureDetector.OnGestureListener;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
import android.widget.ViewFlipper;

import com.scibli.audio.recorder.R;

public class FileInfoAdapter extends BaseAdapter implements OnGestureListener, OnTouchListener {
	protected static final CharSequence TAG = Util.getPackageName();
	protected static final int SWIPE_MIN_DISTANCE = 120;
	protected static final int SWIPE_MAX_OFF_PATH = 250;
	protected static final int SWIPE_THRESHOLD_VELOCITY = 200;
	
	protected final Context mContext;
	protected final LayoutInflater mLayoutInflater;
	protected final GestureDetector mGestureDetector;
	
	protected ArrayList<FileInfo> mFileInfos;
	
	protected TextView mTextFileName;
	protected TextView mTextDateTime;
	protected TextView mTextFileSize;
	protected TextView mTextDuration;
	protected TextView mTextFileFormat;
	protected ViewFlipper mFlipperEntry;
	
	public FileInfoAdapter(Context context, ArrayList<FileInfo> fileInfos) {
		mContext = context;
		mFileInfos = fileInfos;
		mLayoutInflater = (LayoutInflater) mContext.getSystemService(
				Context.LAYOUT_INFLATER_SERVICE);
		mGestureDetector = new GestureDetector(this);
	}

	@Override
	public int getCount() {
		return mFileInfos.size();
	}

	@Override
	public Object getItem(int arg0) {
		return mFileInfos.get(arg0);
	}

	@Override
	public long getItemId(int arg0) {
		return 0;
	}

	@Override
	public View getView(int arg0, View arg1, ViewGroup arg2) {
		final View view = mLayoutInflater.inflate(R.layout.recorderlist_entry, null);
		final FileInfo fileInfo = mFileInfos.get(arg0);
		final CharSequence dateTime = android.text.format.DateFormat.getMediumDateFormat(mContext).format(
				fileInfo.getDateTime()) + " " + android.text.format.DateFormat.getTimeFormat(mContext).format(
						fileInfo.getDateTime());
		
		mTextFileName = (TextView) view.findViewById(R.id.textFileName);
		mTextFileName.setText(fileInfo.getFileName());
		
		mTextDateTime = (TextView) view.findViewById(R.id.textDateTime);
		mTextDateTime.setText(dateTime);
		
		mTextFileSize = (TextView) view.findViewById(R.id.textFileSize);
		mTextFileSize.setText(fileInfo.getFileSize());
		
		mTextDuration = (TextView) view.findViewById(R.id.textDuration);
		mTextDuration.setText(fileInfo.getDuration());
		
		mTextFileFormat = (TextView) view.findViewById(R.id.textFileFormat);
		mTextFileFormat.setText(fileInfo.getFileFormat());
		
		mFlipperEntry =(ViewFlipper) view.findViewById(R.id.flipperEntry);
		mFlipperEntry.setInAnimation(mContext, android.R.anim.fade_in);
		mFlipperEntry.setOutAnimation(mContext, android.R.anim.fade_out);
		
		view.setOnTouchListener((OnTouchListener) this);
		return view;
	}

	@Override
	public boolean onDown(MotionEvent arg0) {
		return true;
	}

	@Override
	public boolean onFling(MotionEvent arg0, MotionEvent arg1, float arg2,
			float arg3) {
		try {
            if(arg0.getX() > arg1.getX() && Math.abs(arg0.getX() - arg1.getX()) > SWIPE_MIN_DISTANCE 
            		&& Math.abs(arg2) > SWIPE_THRESHOLD_VELOCITY) {
                mFlipperEntry.showNext();
            }else if (arg0.getX() < arg1.getX() && arg1.getX() - arg0.getX() > SWIPE_MIN_DISTANCE 
            		&& Math.abs(arg2) > SWIPE_THRESHOLD_VELOCITY) {
            	mFlipperEntry.showPrevious();
            }
        } catch (Exception e) {
            Log.e(TAG.toString(), e.getMessage());
        }
		
		return true;
	}

	@Override
	public void onLongPress(MotionEvent arg0) {}

	@Override
	public boolean onScroll(MotionEvent arg0, MotionEvent arg1, float arg2,
			float arg3) {
		return true;
	}

	@Override
	public void onShowPress(MotionEvent arg0) {}

	@Override
	public boolean onSingleTapUp(MotionEvent arg0) {
		return true;
	}

	@Override
	public boolean onTouch(View arg0, MotionEvent arg1) {
		return mGestureDetector.onTouchEvent(arg1);
	}

}
Problem dabei ist: Generell funktioniert dies ja, aber leider wird beim "flingen" immer der letzte Eintrag in der ListView angesprochen.

Habt ihr eine Idee, wie ich jeden Eintrag einzeln ansprechen kann?
Oder kennt ihr einen besseren Lösungsweg, wie ich dieses Feature von der Twitter-App nachbauen kann?

Vielen Dank,
Grüße
MetBo ist offline   Mit Zitat antworten
Alt 27.06.2011, 19:33   #2 (permalink)
Erfahrener Benutzer
 
Benutzerbild von MetBo

Modell: Galaxy S i9100

Registriert seit: 14.05.2010
Beiträge: 278
Abgegebene Danke: 9
Erhielt 5 Danke für 5 Beiträge
Standard AW: ListView Item Fling Gesture

Push. Kennt keiner eine Lösung?
MetBo ist offline   Mit Zitat antworten
Alt 01.07.2011, 17:52   #3 (permalink)
Erfahrener Benutzer
 
Benutzerbild von MetBo

Modell: Galaxy S i9100

Registriert seit: 14.05.2010
Beiträge: 278
Abgegebene Danke: 9
Erhielt 5 Danke für 5 Beiträge
Standard AW: ListView Item Fling Gesture

Swipe for action | Android Interaction Design Patterns |

Hier eine Beschreibung ... aber leider keine Lösung
MetBo ist offline   Mit Zitat antworten
Alt 01.07.2011, 19:09   #4 (permalink)
Ehren-Mitglied
 
Benutzerbild von quercus

Registriert seit: 18.11.2010
Beiträge: 4.451
Abgegebene Danke: 490
Erhielt 1.734 Danke für 994 Beiträge
Standard AW: ListView Item Fling Gesture

Servus,

wie hast du eigentlich die onFling() method und das amount of time we set gelöst. "Fling gesture" wird ja nur erkannt, so lange der Finger das Display berührt.
__________________

~ Gruß, Wilhelm ~


Ratiopharm - LESEN 100mg - Zu Risiken und Nebenwirkungen fragen Sie Ihren Arzt oder Apotheker.

Geändert von quercus (01.07.2011 um 19:13 Uhr)
quercus ist offline   Mit Zitat antworten
Alt 01.07.2011, 19:15   #5 (permalink)
Erfahrener Benutzer
 
Benutzerbild von MetBo

Modell: Galaxy S i9100

Registriert seit: 14.05.2010
Beiträge: 278
Abgegebene Danke: 9
Erhielt 5 Danke für 5 Beiträge
Standard AW: ListView Item Fling Gesture

Das ist die Frage. onFling wird durch
Zitat:
mGestureDetector.onTouchEvent(arg1);
erkannt bzw. initialisiert.

Ich habe noch einen anderen Weg getestet: Den Gesturedetector der ListView zugewiesen. Dabei kann ich auch das entsprechende Item aus der Liste mit pointToPosition ansprechen. Nur leider reagiert der ViewFlipper dann nicht.
MetBo ist offline   Mit Zitat antworten
Alt 01.07.2011, 19:24   #6 (permalink)
Ehren-Mitglied
 
Benutzerbild von quercus

Registriert seit: 18.11.2010
Beiträge: 4.451
Abgegebene Danke: 490
Erhielt 1.734 Danke für 994 Beiträge
Standard AW: ListView Item Fling Gesture

Stört es Dich wenn ich an deinem Code ein paar Versuche unternehme?

PS das final float finde ich nicht
__________________

~ Gruß, Wilhelm ~


Ratiopharm - LESEN 100mg - Zu Risiken und Nebenwirkungen fragen Sie Ihren Arzt oder Apotheker.

Geändert von quercus (01.07.2011 um 19:28 Uhr)
quercus ist offline   Mit Zitat antworten
Alt 01.07.2011, 19:29   #7 (permalink)
Erfahrener Benutzer
 
Benutzerbild von MetBo

Modell: Galaxy S i9100

Registriert seit: 14.05.2010
Beiträge: 278
Abgegebene Danke: 9
Erhielt 5 Danke für 5 Beiträge
Standard AW: ListView Item Fling Gesture

Nein natürlich nicht. Was hast du denn vor? ;-)
MetBo ist offline   Mit Zitat antworten
Alt 01.07.2011, 19:31   #8 (permalink)
Ehren-Mitglied
 
Benutzerbild von quercus

Registriert seit: 18.11.2010
Beiträge: 4.451
Abgegebene Danke: 490
Erhielt 1.734 Danke für 994 Beiträge
Standard AW: ListView Item Fling Gesture

Du hast da den onTouchListener anstatt den gestureListener?
__________________

~ Gruß, Wilhelm ~


Ratiopharm - LESEN 100mg - Zu Risiken und Nebenwirkungen fragen Sie Ihren Arzt oder Apotheker.
quercus ist offline   Mit Zitat antworten
Alt 01.07.2011, 19:34   #9 (permalink)
Erfahrener Benutzer
 
Benutzerbild von MetBo

Modell: Galaxy S i9100

Registriert seit: 14.05.2010
Beiträge: 278
Abgegebene Danke: 9
Erhielt 5 Danke für 5 Beiträge
Standard AW: ListView Item Fling Gesture

Richtig, aber im Grunde ist der GestureListener ein onTouchListener ;-) Von daher ist es eigentlich egal, ob ich ihn implementiere, oder als Variable nutze.
MetBo ist offline   Mit Zitat antworten
Alt 01.07.2011, 19:38   #10 (permalink)
Ehren-Mitglied
 
Benutzerbild von quercus

Registriert seit: 18.11.2010
Beiträge: 4.451
Abgegebene Danke: 490
Erhielt 1.734 Danke für 994 Beiträge
Standard AW: ListView Item Fling Gesture

ich nehm mal ein Beispiel für "Gesture" und "Listener":

  1. @Override
  2. public boolean onTouchEvent(MotionEvent event) {
  3. return gestures.onTouchEvent(event);
  4. }
@Overridepublic boolean onTouchEvent(MotionEvent event) { return gestures.onTouchEvent(event);}
und dann für das implementieren des Listeners:
  1. private class GestureListener implements GestureDetector.OnGestureListener,
  2. GestureDetector.OnDoubleTapListener {
  3. PlayAreaView view;
  4. public GestureListener(PlayAreaView view) {
  5. this.view = view;
  6. }
__________________

~ Gruß, Wilhelm ~


Ratiopharm - LESEN 100mg - Zu Risiken und Nebenwirkungen fragen Sie Ihren Arzt oder Apotheker.
quercus ist offline   Mit Zitat antworten
Antwort

Stichworte
-

Themen-Optionen
Ansicht


Ähnliche Themen

Thema Autor Forum Antworten Letzter Beitrag
listView.setChoiceMode() in einer custom ListView mr.freeze Android App Entwicklung 0 16.02.2011 09:57
Positionsnummer von geklicktem Item (ListView) Gingerbread Android App Entwicklung 9 13.02.2011 12:24
Froyo Browser Tabswitch Gesture inteks Motorola Defy Forum 0 03.02.2011 16:48
Gesture Search und Googlekontakte buccaneers HTC Desire Forum 4 01.07.2010 09:59
Listview Filtern. Probleme beim Klick auf ein Item Raidri Android App Entwicklung 3 15.04.2010 10:30




Du liest gerade: "ListView Item Fling Gesture" unter "Android App Entwicklung" auf Android-Hilfe.de.


Powered by vBulletin®
Copyright ©2000 - 2012, vBulletin Solutions, Inc.
Search Engine Friendly URLs by vBSEO
© Android-Hilfe.de 2012 - All rights reserved.