2013-11-09 13 views
5

Ich bin neu zu Swipe-Geste für Android-Anwendung zu implementieren. Ich versuche, eine Image von links nach rechts auf dem Bildschirm mit dem folgenden Code zu streichen:Android - So verschieben Sie ImageView auf Swipe

public class MainActivity extends Activity implements OnClickListener{ 
private static final int SWIPE_MIN_DISTANCE = 10; 
private static final int SWIPE_MAX_OFF_PATH = 250; 
private static final int SWIPE_THRESHOLD_VELOCITY = 200; 
private GestureDetector gestureDetector; 
View.OnTouchListener gestureListener; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    ImageView btnSwipe = (ImageView)findViewById(R.id.imgBtnSwipe); 
    btnSwipe.setOnClickListener(this); 
    gestureDetector = new GestureDetector(this, new MyGestureDetector()); 
    gestureListener = new View.OnTouchListener() { 
     public boolean onTouch(View v, MotionEvent event) { 
      return gestureDetector.onTouchEvent(event); 
     } 
    }; 
    btnSwipe.setOnTouchListener(gestureListener); 
} 
class MyGestureDetector extends SimpleOnGestureListener { 
    @Override 
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { 
     try { 
      if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH) 
       return false; 
      if(e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { 
       Toast.makeText(MainActivity.this, "Left Swipe", Toast.LENGTH_SHORT).show(); 
      } else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { 
       Toast.makeText(MainActivity.this, "Right Swipe", Toast.LENGTH_SHORT).show(); 
      } 
     } catch (Exception e) { 
      // nothing 
     } 
     return false; 
    } 

} 
@Override 
public void onClick(View v) { 
} 
} 

Ich erhalte Toast Nachricht rechten Swipe. Aber das Bild bewegt sich nicht. Wie kann ich das umsetzen? Bitte helfen Sie mir mit Beispielcode/Links.

Antwort

5

ich eine einfache Lösung wie folgt zu finden:

Für Rechts Swipe (nach rechts) :

btnSwipe.setTranslationX(e2.getX()); 
Jetzt

Für Links Swipe (nach links)“

btnSwipe.setTranslation(e1.getX()); 

wird die Image von rechts nach links und links Durchfuhr horizontal nach rechts. Aber das funktioniert ab Android API Level 11.

+0

auf der zweiten, "Swipe nach links", ich denke, es muss wieder gesetzt TranslationX, oder? – iversoncru

+0

Wenn ich versuche, "setTranslation" mit einer Ansicht zu verwenden (hier ist btnSwipe ImageView), gibt es einen Fehler: "Die Methode setTranslationX ist nicht definiert für den Typ View" gleicher Fehler für ImageView. irgendwelche Ideen? – iversoncru

+0

Was ist Ihr API-Level? Wenn es weniger als 11 ist, haben Sie diese Funktionalität nicht. – Brianide

3

Sie müssen PagerAdapter für die Wischfunktion verwenden. Etwas wie folgt aus:

public class FullScreenImageAdapter extends PagerAdapter { 

//Stores all the image paths 
private ArrayList<String> _imagePaths; 

......... 


@Override 
    public Object instantiateItem(ViewGroup container, int position) { 
//This method is called each time user swipes the screen 
//Write suitable code to display next image on the screen 
} 

...... 

} 

Hier ist der Link zur offiziellen Dokumentation.

http://developer.android.com/training/animation/screen-slide.html http://developer.android.com/reference/android/support/v4/view/PagerAdapter.html

Hier ist der Link für eine hervorragende Tutorial über Image Slider

http://www.androidhive.info/2013/09/android-fullscreen-image-slider-with-swipe-and-pinch-zoom-gestures/

+0

Ich muss die Seite nicht verschieben. Ich muss nur die Bildansicht auf Swipe bewegen (von links nach rechts) ... Wenn das Bild an das rechte Ende geht, wechseln Sie einfach die Aktivität. Ich brauche nicht von PageAdapter oder ViewFlipper, wie sie die ganze Seite durchläuft ... –

+0

Oh..how über horizontale ListView verwenden? Füllen Sie Ihren horizontalen ListView-Adapter mit Bildern und das Layout für jedes Listenelement ist ein ImageView. –

+0

@AbhishekV Er sagte, er habe nur eine Bildansicht und er möchte mit TouchEvents wischen. –

Verwandte Themen