Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android: swipe screen to open another activity?

Tags:

i'm a n00b programmer and need a lot of help.

Just for tutorial purpose, I want to make simple flora & fauna (plant & animal) encyclopedia

I want to make my home screen drag-able just like the Android's home screen. Swipe right to open Plant page and swipe left to open Animal page. I don't know how to make the transition effect. So we can drag it halfway to peek what's in next page and just drag back to cancel it

Can you guys share a link to make the drag-able screen?

Thanks before

[Edit]

@Agarwal I tried the code from your Link2 and it's not working

I try to test whether the gesture detected or not by putting Toast inside the inner class but the Toast isn't shown. The Link1 is basically the same though.

and from the looks of the code, I think it can't make my screen drag-able like in Android's home screen

my code:

public class Home extends Activity implements OnClickListener {     private GestureDetector gestureDetector;     View.OnTouchListener gestureListener;     ImageButton flora, fauna;     Intent go;  @Override public void onCreate(Bundle savedInstanceState) {     super.onCreate(savedInstanceState);     setContentView(R.layout.main);      initialize();      gestureDetector = new GestureDetector(new SwipeGestureDetector());     gestureListener = new View.OnTouchListener() {         public boolean onTouch(View v, MotionEvent event) {             return gestureDetector.onTouchEvent(event);         }     }; }  private void initialize() {     //find view by id to image button     //set onClickListener to image button }  public void onClick(View v) {     //normal switch and case for each button  }  private void onLeftSwipe() {     Toast t = Toast.makeText(Home.this, "Left swipe", Toast.LENGTH_LONG);     t.show();     go = new Intent("test.apps.FLORA");     startActivity(go); }  private void onRightSwipe() {     Toast t = Toast.makeText(Home.this, "Right swipe", Toast.LENGTH_LONG);     t.show();     go = new Intent("test.apps.FAUNA");     startActivity(go); }  private class SwipeGestureDetector extends SimpleOnGestureListener {     private static final int SWIPE_MIN_DISTANCE = 50;     private static final int SWIPE_MAX_OFF_PATH = 200;     private static final int SWIPE_THRESHOLD_VELOCITY = 200;      @Override     public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,             float velocityY) {         try {             Toast t = Toast.makeText(Home.this, "Gesture detected", Toast.LENGTH_SHORT);             t.show();             float diffAbs = Math.abs(e1.getY() - e2.getY());             float diff = e1.getX() - e2.getX();              if (diffAbs > SWIPE_MAX_OFF_PATH)                 return false;              // Left swipe             if (diff > SWIPE_MIN_DISTANCE                     && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {                 Home.this.onLeftSwipe();             }              // Right swipe             else if (-diff > SWIPE_MIN_DISTANCE                     && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {                 Home.this.onRightSwipe();             }         } catch (Exception e) {             Log.e("Home", "Error on gestures");         }         return false;     }  } } 
like image 848
hrsetyono Avatar asked Apr 12 '12 14:04

hrsetyono


1 Answers

I realise this is an old question but for anyone else wondering why the above code does not work it is because he has not set the OnTouchListener to a View object. This is why his swipe "event" is not being picked up, because nothing is listening for it.

He could add this line to set swipes on his image button (though you would probably want a better View object then this):

flora.setOnTouchListener(gestureListener); 
like image 66
David Hirst Avatar answered Oct 06 '22 23:10

David Hirst