Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Basic4Android

Войти
Регистрация
Восстановить пароль
 
Miki48RU
0 / 0 / 0
Регистрация: 08.03.2016
Сообщений: 15
#1

Как реализовать смену экранов жестами - Basic4Android

20.03.2016, 20:35. Просмотров 1032. Ответов 5
Метки нет (Все метки)

Здравствуйте!
Всю голову сломал над тем как сделать смену экранов жестами. Пока реализована схема работы через Event и onFilling, но такой метод не очень удачен так как не меняет экраны если проводить жесты на элементах экрана, например на спиннерах. Есть еще метод ViewPage, но он вроде работает с фрагментами, а у меня уже все активити созданы и на фрагмены их не переделаешь. Как реализовать? Спасибо!
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.03.2016, 20:35
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как реализовать смену экранов жестами (Basic4Android):

Как реализовать смену картинок - Программирование Android
Мне, например, нужно установить разный фон на кнопку в зависимости от определенного условия. Например есть игра...если предыдущий уровень...

Подскажите как сделать разметку для разных экранов - Программирование Android
У меня есть recyclerview в него устанавливается GridLayoutManager в 3 колонки, есть разметка itemа для этого списка. Item внутри себя...

Как установить программного ориентацию для разных экранов? - Программирование Android
Здравствуйте! Для своей программы хочу такую логику: для телефонов ориентация только вертикальная, а для планшетов - только...

Как сделать приложение под все виды экранов - Программирование Android
Здравствуйте уважаемые форумчане! Кто-нибудь может подсказать, как сделать приложение под все виды экранов или поделиться хорошей...

Как подготовить изображение для всех видов и типов экранов - Программирование Android
как подготовить изображение для всех видов и типов экранов? то есть подготовить по разным разрешениям и density. вот создал я...

Как поймать смену фокуса EditText? - Программирование Android
Вопрос в следующем (Упрощу суть): Есть EditText1, тыкаем на него пальцем и в момент тычка происходит появление второго EditText2. Каким...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
uhodi
0 / 0 / 0
Регистрация: 01.12.2015
Сообщений: 3
21.03.2016, 18:43 #2
Удачная тема, Вчера и сегодня тоже думал над подобным


Мне необходимо отловить жест движения справа налево и наоборот(смахивание)
Почему это не работает?

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
 public boolean onTouchEvent(MotionEvent event)
    {
 
        float x = event.getX();
        float y = event.getY();
        int action = event.getAction();
        int edgeFlags = event.getEdgeFlags();
 
 
        switch (edgeFlags)
 
        {
            case MotionEvent.EDGE_LEFT:
            sex=3;   break;
 
 
            case MotionEvent.EDGE_RIGHT:
            sex=1;
                break;
 
            case MotionEvent.EDGE_TOP:
                break;
 
            case MotionEvent.EDGE_BOTTOM:
                break;
 
            default:
 
                break;
        }
 
return true;
}
Такой код тоже не подходит:

private float x1,x2;
static final int MIN_DISTANCE = 150;

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
@Override
public boolean onTouchEvent(MotionEvent event)
{     
    switch(event.getAction())
    {
      case MotionEvent.ACTION_DOWN:
          x1 = event.getX();                         
      break;         
      case MotionEvent.ACTION_UP:
          x2 = event.getX();
          float deltaX = x2 - x1;
 
          if (Math.abs(deltaX) > MIN_DISTANCE)
          {
 
              // Left to Right swipe action
              if (x2 > x1)
              {
                             
              }
 
              // Right to left swipe action               
              else 
              {
                            
              }
 
          }
          else
          {
             
          }                          
      break;   
    }           
 
 
 
 
 
    return super.onTouchEvent(event);       
}
0
Miki48RU
0 / 0 / 0
Регистрация: 08.03.2016
Сообщений: 15
21.03.2016, 20:23  [ТС] #3
Вы хотите именно активность менять жестами? Могу свой код скинуть, но он не работает если на экране провести по другим элементам.
0
uhodi
0 / 0 / 0
Регистрация: 01.12.2015
Сообщений: 3
22.03.2016, 16:02 #4
не активность, свои переменные

второй код дополнил и всё стало работать, это меня устроило

Miki48RU, а такой метод не покатит для тебя?
вроде он все касания перехватывает

Добавлено через 5 минут
вот еще что-то
касаемо жестов
https://medium.com/@euryperez/androi...8dc#.20dh1px1r
0
Miki48RU
0 / 0 / 0
Регистрация: 08.03.2016
Сообщений: 15
22.03.2016, 17:06  [ТС] #5
Что бы он все перехватывал нужно в разметке активностей написать
android:clickable="true"
android:focusable="true"
android:focusableInTouchMode="true"
иначе не перехватывает на некоторых элементах
0
Miki48RU
0 / 0 / 0
Регистрация: 08.03.2016
Сообщений: 15
06.04.2016, 09:51  [ТС] #6
В итоге получилось это!
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
public class OnSwipeTouchListener implements View.OnTouchListener {
 
    private Context context;
 
    public OnSwipeTouchListener(Context context){
        this.context = context;
    }
    private final GestureDetector gestureDetector = new GestureDetector(context, new GestureListener());
 
    public boolean onTouch(final View v, final MotionEvent event){
        return gestureDetector.onTouchEvent(event);
    }
 
    private final class GestureListener extends GestureDetector.SimpleOnGestureListener{
 
        private static final int SWIPE_THRESHOLD = 200;
        public static final int SWIPE_VELOCITY_THRESHOLD = 200;
 
        public boolean onDown(MotionEvent e){
            return super.onDown(e);
        }
 
        @Override
        public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
            boolean result = false;
            try { float diffY = e2.getY() - e1.getY();
                float diffX = e2.getX() - e1.getX();
                if (Math.abs(diffX) > Math.abs(diffY)) {
                    if (Math.abs(diffX) > SWIPE_THRESHOLD && Math.abs(velocityX) > SWIPE_VELOCITY_THRESHOLD) {
                        if (diffX > 0) {
                            result = onSwipeRight();
                        } else {
                            result = onSwipeLeft();
                        }
                    }
                } else {
                    if (Math.abs(diffY) > SWIPE_THRESHOLD && Math.abs(velocityY) > SWIPE_VELOCITY_THRESHOLD) {
                        if (diffY > 0) {
                            result = onSwipeBottom();
                        } else {
                            result = onSwipeTop();
                        }
                    }
                }
            } catch (Exception exception) {
                exception.printStackTrace();
            }
            return result;
        }
    }
 
 
        public boolean onSwipeRight() {
        return false;
        }
 
        public boolean onSwipeLeft() {
            return false;
        }
 
        public boolean onSwipeTop() {
            return false;
        }
 
        public boolean onSwipeBottom() {
            return false;
        }
 
}
в активности это:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
public class MainActivity extends AppCompatActivity {
 
    public MainActivity() {
    }
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        findViewById(R.id.main_activity).setOnTouchListener(activitySwiped);
 
    }
 
 
 
    public void onClickStart(View view) {
        Intent intent = new Intent(MainActivity.this, RatesActivity.class);
        startActivity(intent);
    }
 
 
    View.OnTouchListener activitySwiped = new OnSwipeTouchListener(this) {
        public boolean onSwipeRight() {
            return true;
        }
 
        public boolean onSwipeLeft() {
            Intent intent = new Intent(MainActivity.this, RatesActivity.class);
            startActivity(intent);
            return true;
        }
 
        public boolean onSwipeBottom() {
            return true;
        }
 
    };
}
И все работает, но нужно как писал выше в разметке проставить True
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.04.2016, 09:51
Привет! Вот еще темы с ответами:

CustomView разные изображения для разных экранов - одна система координат - Как? - Программирование Android
Есть изображение, карта, на ней я должен в координатах размещать объекты. Изображения разные: hdpi, ldpi, mdpi и так далее. Когда я...

Как запретить смену ориентации при вызове DialogFragment? - Программирование Android
В активити вызывается DialogFragment, как запретить смену ориентации экрана пока он активен?

Создание экранов - Программирование Android
Только начал изучать Android да и Java тоже. Хочу узнать, как сделать несколько экранов. Типа авторизация, при успешной открытие 2-ого...

Перелистывание экранов - Программирование Android
Если кто пользовался официальным приложение для ВК под андройд, то в разделе "новости" если провести пальцем по экрану,то от выползает как...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
06.04.2016, 09:51
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru