| |||||||
Das Thema "ListView Item Fling Gesture" befindet sich unter Android App Entwicklung auf Android-Hilfe.de.
|
| | Themen-Optionen | Ansicht |
| | #1 (permalink) |
| Erfahrener Benutzer Modell: Galaxy S i9100 Registriert seit: 14.05.2010
Beiträge: 278
Abgegebene Danke: 9
Erhielt 5 Danke für 5 Beiträge
| 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);
}
} 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 |
| | |
| | #3 (permalink) |
| Erfahrener Benutzer Modell: Galaxy S i9100 Registriert seit: 14.05.2010
Beiträge: 278
Abgegebene Danke: 9
Erhielt 5 Danke für 5 Beiträge
| Swipe for action | Android Interaction Design Patterns | Hier eine Beschreibung ... aber leider keine Lösung |
| | |
| | #4 (permalink) |
| Ehren-Mitglied Registriert seit: 18.11.2010
Beiträge: 4.451
Abgegebene Danke: 490
Erhielt 1.734 Danke für 994 Beiträge
|
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) |
| | |
| | #5 (permalink) | |
| Erfahrener Benutzer Modell: Galaxy S i9100 Registriert seit: 14.05.2010
Beiträge: 278
Abgegebene Danke: 9
Erhielt 5 Danke für 5 Beiträge
|
Das ist die Frage. onFling wird durch Zitat:
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. | |
| | |
| | #6 (permalink) |
| Ehren-Mitglied Registriert seit: 18.11.2010
Beiträge: 4.451
Abgegebene Danke: 490
Erhielt 1.734 Danke für 994 Beiträge
|
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) |
| | |
| | #8 (permalink) |
| Ehren-Mitglied Registriert seit: 18.11.2010
Beiträge: 4.451
Abgegebene Danke: 490
Erhielt 1.734 Danke für 994 Beiträge
|
Du hast da den onTouchListener anstatt den gestureListener?
__________________ ~ Gruß, Wilhelm ~ Ratiopharm - LESEN 100mg - Zu Risiken und Nebenwirkungen fragen Sie Ihren Arzt oder Apotheker. |
| | |
| | #9 (permalink) |
| Erfahrener Benutzer Modell: Galaxy S i9100 Registriert seit: 14.05.2010
Beiträge: 278
Abgegebene Danke: 9
Erhielt 5 Danke für 5 Beiträge
|
Richtig, aber im Grunde ist der GestureListener ein onTouchListener ;-) Von daher ist es eigentlich egal, ob ich ihn implementiere, oder als Variable nutze.
|
| | |
| | #10 (permalink) |
| Ehren-Mitglied Registriert seit: 18.11.2010
Beiträge: 4.451
Abgegebene Danke: 490
Erhielt 1.734 Danke für 994 Beiträge
|
ich nehm mal ein Beispiel für "Gesture" und "Listener":
und dann für das implementieren des Listeners:
__________________ ~ Gruß, Wilhelm ~ Ratiopharm - LESEN 100mg - Zu Risiken und Nebenwirkungen fragen Sie Ihren Arzt oder Apotheker. |
| | |
![]() |
|
| Themen-Optionen | |
| Ansicht | |
| |
| ||||
| 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 |