Страницы

Поиск по вопросам

суббота, 14 декабря 2019 г.

Возврат к предыдущей activity жестом смахивания

#java #android #activity




Как добиться подобного эффекта, когда текущая activity следует за пальцем, а под
ней видно предыдущую?
    


Ответы

Ответ 1



В res/anim создаете файлы slide_in_left.xml slide_in_right.xml: slide_out_left.xml: slide_out_right.xml: Теперь кодим: main activity class: class MyGestureDetector extends SimpleOnGestureListener { @Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { try { float slope = (e1.getY() - e2.getY()) / (e1.getX() - e2.getX()); float angle = (float) Math.atan(slope); float angleInDegree = (float) Math.toDegrees(angle); // left to right if (e1.getX() - e2.getX() > 20 && Math.abs(velocityX) > 20) { if ((angleInDegree < 45 && angleInDegree > -45)) { startActivity(new Intent(CurrentActivitiy.this, NextActivity.class); CurrentActivity.this.overridePendingTransition( R.anim.slide_in_left, R.anim.slide_out_right); finish(); } // right to left fling } else if (e2.getX() - e1.getX() > 20 && Math.abs(velocityX) > 20) { if ((angleInDegree < 45 && angleInDegree > -45)) { startActivity(new Intent(CurrentActivitiy.this, NextActivity.class); CurrentActivity.this.overridePendingTransition( R.anim.slide_in_right, R.anim.slide_out_left); finish(); } } return true; } catch (Exception e) { // nothing } return false; } } слушатели действий: final GestureDetector gestureDetector = new GestureDetector(new MyGestureDetector()); //the parent layout findViewById(R.id.parent_layout).setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { if (gestureDetector.onTouchEvent(event)) return false; return false; } }); //an image view findViewById(R.id.image_view).setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { if (gestureDetector.onTouchEvent(event)) return false; return false; } }); // a text view findViewById(R.id.text_view).setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { if (gestureDetector.onTouchEvent(event)) return false; return false; } }); Можно еще посмотретьтут.

Ответ 2



Честно говоря это не Android way, но если сильно надо то есть такая либа https://github.com/ikew0ng/SwipeBackLayout

Комментариев нет:

Отправить комментарий