2012-03-27 7 views
0

J'essaye donc de faire en sorte que le composant imageview de ma page change en glissant. Je ne suis même pas capable de prendre le geste de glisser et de le transmettre sur le détecteur de mouvement.OnFling et ImageView ne fonctionnent pas correctement

Dans la méthode OnFling, je ne parviens pas à accéder à ces instructions de journal. Y a-t-il quelque chose qui me manque?

public class Detail extends Activity implements OnClickListener{ 

private GestureDetector gestureDetector; 
private ImageView wallpaper; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
      gestureDetector = new GestureDetector(new MyGestureDetector()); 
      wallpaper = (ImageView)findViewById(R.id.wallpaper); 
    wallpaper.setAdjustViewBounds(true); 

      wallpaper.setOnTouchListener(new OnTouchListener() { 

     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      Log.d("getting", "here"); 
          //return gestureDetector.onTouchEvent(event); 
      return true; 
        } 
      }); 
} 

class MyGestureDetector extends SimpleOnGestureListener { 
    private static final int SWIPE_MIN_DISTANCE = 50; 
    private static final int SWIPE_MAX_OFF_PATH = 250; 
    private static final int SWIPE_THRESHOLD_VELOCITY = 200; 

    @Override 
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { 
     try { 
      Log.d("MOTION", "STARTED"); 
      if(e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { 

       Log.d("Moving", "Right"); 
       return true; 

      } 
      else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { 
       Log.d("Moving", "Left"); 
       return true; 

      } 
     } catch (Exception e) { 

     } 
     return false; 
    } 
} 

Répondre

0

Essayez ceci: J'ai une classe appelée GenesMotionDetector.java. Voici le code correspondant:

package gene.com.motioneventssample; 

import android.app.Activity; 
import android.os.Bundle; 
import android.view.GestureDetector; 
import android.view.MotionEvent; 
import android.widget.ImageView; 
import android.widget.LinearLayout; 
import android.widget.TextView; 

//This works 
public class GenesMotionDetector extends Activity implements GestureDetector.OnGestureListener { 
    private GestureDetector gestureScanner; 
    LinearLayout mView1; 
    TextView mView2; 
    ImageView mView3; 


    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.nothing); 
     gestureScanner= new GestureDetector(getBaseContext(),this); 
    } 

    @Override 
    public boolean onTouchEvent(MotionEvent me) { 
     System.out.println("Inside onTouchEvent() of GenesMotionDetector.java"); 
     return gestureScanner.onTouchEvent(me); 
    } 

    @Override 
    public boolean onDown(MotionEvent e) { 
     System.out.println("Inside onDown() of GenesMotionDetector.java"); 
     return true; 
    } 

    @Override 
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { 
     System.out.println("Inside onFling() of GenesMotionDetector.java"); 
     return true; 
    } 

    @Override 
    public void onLongPress(MotionEvent e) { 
     System.out.println("Inside onLongPress() of GenesMotionDetector.java"); 
    } 

    @Override 
    public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { 
     System.out.println("Inside onScroll() of GenesMotionDetector.java"); 
     return true; 
    } 

    @Override 
    public void onShowPress(MotionEvent e) { 
     System.out.println("Inside onShowPress() of GenesMotionDetector.java"); 
    } 

    @Override 
    public boolean onSingleTapUp(MotionEvent e) { 
     System.out.println("Inside onSingleTapUp() of GenesMotionDetector.java"); 
     return true; 
    } 
} 

Le fichier de mise en page XML correspondant à cette classe est nothing.xml. Voici le code correspondant:

<?xml version="1.0" encoding="utf-8"?> 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/screen" 
    android:orientation="vertical" android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <TextView 
     android:id="@+id/text" 
     android:background="#17528c" 
     android:text="testing" 
     android:layout_width="100dp" 
     android:layout_height="200dp" /> 

    <ImageView 
     android:id="@+id/image" 
     android:background="#f8af20" 
     android:layout_width="100dp" 
     android:layout_height="200dp" /> 
</LinearLayout> 
0

vous devez définir

mDetector.setIsLongpressEnabled(false); 

Longpress est activé (true) par défaut et ce qui ne fait écouter l'événement LongPress seulement et les rejets de défilement, jeter et d'autres événements compliqués.

Il suffit de mettre ce code après vous configurez votre objet détecteur de mouvement:

mDetector = new GestureDetectorCompat(context, this); 
mDetector.setOnDoubleTapListener(this); 
mDetector.setIsLongpressEnabled(false); 

paix

Questions connexes