Android: swipe left to right and left to right

I'm new to Android, and I'm trying to create a page where I can scroll left to right and left to right to go to the previous and next pages. I spent a lot of time searching and trying different things. For some reason, when I sit down (no matter which direction), it only shows the following image. He should have shown me the previous photo when I scroll right to left. Any help would be greatly appreciated! Thanks so much for your time :)

public class MyGestureDetector extends SimpleOnGestureListener { private static final int SWIPE_MIN_DISTANCE = 120; private static final int SWIPE_MAX_OFF_PATH = 250; private static final int SWIPE_THRESHOLD_VELOCITY = 200; public boolean isRightToLeft = false; @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; // right to left swipe // right to left swipe if(e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { isRightToLeft = true; return true; } // left to right swipe else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { isRightToLeft = false; return true; } } catch (Exception e) { // nothing } return false; } } public class Pictures extends Activity { private int pictureCounter = 1; private Context myContext = this; private GestureDetector gestureDetector; View.OnTouchListener gestureListener; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.pictures); getPicture(pictureCounter); final MyGestureDetector myGestureDetector = new MyGestureDetector(); // Gesture detection gestureDetector = new GestureDetector(myGestureDetector); gestureListener = new View.OnTouchListener() { public boolean onTouch(View v, MotionEvent event) { if (gestureDetector.onTouchEvent(event)) { if (myGestureDetector.isRightToLeft) { previousPicture(); } else if (!myGestureDetector.isRightToLeft) { nextPicture(); } return true; } return false; } }; //iv.setOnTouchListener(gestureListener); ((ImageView)findViewById(R.id.title_pictures)).setOnTouchListener(gestureListener); ImageView iv = (ImageView) findViewById(R.id.flag_pic); iv.setOnClickListener(new OnClickListener() { public void onClick(View arg0) { // TODO Auto-generated method stub nextPicture(); } }); } public void getPicture(int picCounter) { DatabaseHelper myDbHelper = new DatabaseHelper(this); try { myDbHelper.createDatabase(); } catch (IOException ioe) { throw new Error("Unable to create databse"); } try { myDbHelper.openDatabase(); } catch(SQLException sqle) { throw sqle; } String query = "select Before_Picture, After_Picture from picture_mapping where _id = " + picCounter; SQLiteDatabase db = myDbHelper.getReadableDatabase(); Cursor cursor = db.rawQuery(query, null); cursor.moveToFirst(); String beforePicture = cursor.getString(0); String afterPicture = cursor.getString(1); cursor.close(); db.close(); ImageView before_pic = (ImageView) findViewById(R.id.imgView_before_pic); int resId = myContext.getResources().getIdentifier(beforePicture,"drawable", "com.ash.android.pictures"); before_pic.setBackgroundResource(resId); TextView after_pic = (TextView) findViewById(R.id.txtView_after_picture); after_pic.setText(afterPicture); //Toast toast=Toast.makeText(this, beforePicture+ ":" + afterPicture, Toast.LENGTH_LONG); //toast.show(); } public void nextPicture() { if (pictureCounter < 36) { pictureCounter += 1; getPicture(pictureCounter); } else { //do nothing } } public void previousPicture() { if (pictureCounter > 1) { pictureCounter -= 1; getPicture(pictureCounter); } else { //do nothing } } } 

Thanks in advance!

0
source share
2 answers

Comment on

 iv.setOnClickListener 

in your activity, and I think that triggering should work.

+1
source

Sorry that I am not very versed in myself and actually trying to work on this issue myself ... I use titanium api for programming, so I am not familiar with the syntax of your code, although I get a general idea ... (Still on two week study period for my internship)

POINT OF THOUGHT, I see the following lines of code quite early

 //right to left swipe if(e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { isRightToLeft = true; return true; } // left to right swipe else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { isRightToLeft = false; return true; } 

It looks like your equation

 if(e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) 

will work to detect swipe ... However, the ABS() function in your code will only interpret the swipe value and will not be able to determine the difference in direction. Hope this helps!

0
source

Source: https://habr.com/ru/post/1440732/


All Articles