Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.51/91: Рейтинг темы: голосов - 91, средняя оценка - 4.51
5 / 5 / 0
Регистрация: 02.04.2013
Сообщений: 88
1

Swipe навигация в приложении

04.07.2013, 16:06. Показов 17566. Ответов 19
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте.
Возникла потребность в навигации между активити жестами(свайп). Ведешь пальцем влево и переходит в нужное активити.
Нагуглил я очень много всего, куча всяких разных методов, все очень громозкое и сложное.
Хочется просто в обработчик запихать интент с передачей данных и открытие нового класса(нового активити). С этим проблемм нет. Проблема в том что не знаю подходящего метода для свайпа. Может кто подскажет? Буду благодарен.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.07.2013, 16:06
Ответы с готовыми решениями:

Swipe в андроид приложении
Есть главная страница: <div class="main-page">...</div> на ней есть кнопка, по нажатию на которую...

Навигация в приложении
Как сделать чтобы при нажатии на кнопку в меню приложение ,переходило на другую страничку при этом...

Навигация в приложении
Как сделать такую навигацию в предложении, что бы при нажатии на кнопку в главном окне оно...

Навигация в плиточном приложении
как организовать переход между страницами в XAML, создаю плиточное приложение под windows 8.1....

19
86 / 86 / 13
Регистрация: 03.03.2011
Сообщений: 1,873
04.07.2013, 16:10 2
Перелистывание экранов
0
5 / 5 / 0
Регистрация: 02.04.2013
Сообщений: 88
04.07.2013, 16:16  [ТС] 3
Не совсем то. Нужно что то вроде этого:
Кликните здесь для просмотра всего текста

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
background.setOnTouchListener(new OnSwipeTouchListener() {
        public boolean onSwipeTop() {
            Toast.makeText(MainActivity.this, "top", Toast.LENGTH_SHORT).show();
            return true;
        }
        public boolean onSwipeRight() {
            Toast.makeText(MainActivity.this, "right", Toast.LENGTH_SHORT).show();
            return true;
        }
        public boolean onSwipeLeft() {
            Toast.makeText(MainActivity.this, "left", Toast.LENGTH_SHORT).show();
            return true;
        }
        public boolean onSwipeBottom() {
            Toast.makeText(MainActivity.this, "bottom", Toast.LENGTH_SHORT).show();
            return true;
        }
    });


ТОлько я пока не совсем понимаю как это прикрутить к моему случаю.
0
86 / 86 / 13
Регистрация: 03.03.2011
Сообщений: 1,873
04.07.2013, 16:22 4
если правильно понял то на жест влево вызываем активити 1, на жест вправо активити 2 и тд
ну вставляем примерно такой код, создающий новую активность в код приведенный вами выше
Java
1
2
                            Intent intent = new Intent(getActivity(), userImgDialog_Activity.class);                
                            startActivity(intent);
0
5 / 5 / 0
Регистрация: 02.04.2013
Сообщений: 88
04.07.2013, 16:24  [ТС] 5
Да что вставлять понятно, а вот с тем кодом что я выложил непонятно. Что за background? Чем его заменить? Его объявлять нужно в начали или что? Не пойму чему нужно присваивать этот листнер. Поидее работать должно на всем экране.
0
86 / 86 / 13
Регистрация: 03.03.2011
Сообщений: 1,873
04.07.2013, 16:30 6
сам ни разу не пробовал так делать ,но думаю что должно как то так быть
XML
1
2
3
<LinearLayout 
необходимые атрибуты
android:id="@+id/bg">наполнение</LinearLayout>
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
final LinearLayout bg = (LinearLayout)findViewById(R.id.bg);
bg.setOnTouchListener(new OnSwipeTouchListener() {
public boolean onSwipeTop() {
Toast.makeText(MainActivity.this, "top", Toast.LENGTH_SHORT).show();
return true;
}
public boolean onSwipeRight() {
Toast.makeText(MainActivity.this, "right", Toast.LENGTH_SHORT).show();
return true;
}
public boolean onSwipeLeft() {
Toast.makeText(MainActivity.this, "left", Toast.LENGTH_SHORT).show();
return true;
}
public boolean onSwipeBottom() {
Toast.makeText(MainActivity.this, "bottom", Toast.LENGTH_SHORT).show();
return true;
}
});
попробуйте
0
5 / 5 / 0
Регистрация: 02.04.2013
Сообщений: 88
04.07.2013, 17:44  [ТС] 7
Не отрабатывает. Ошибку выдает на 3 строке(bg.setOn.Touch...)
Вообще я могу ошибаться с методом, возможно для реализации свайпа нужен другой метод.

Добавлено через 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
import android.view.GestureDetector;
import android.view.GestureDetector.SimpleOnGestureListener;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
 
public class OnSwipeTouchListener implements OnTouchListener {
 
    private final GestureDetector gestureDetector = new GestureDetector(new GestureListener());
 
    public boolean onTouch(final View view, final MotionEvent motionEvent) {
        super.onTouch(view, motionEvent);
        return gestureDetector.onTouchEvent(motionEvent);
    }
 
    private final class GestureListener extends SimpleOnGestureListener {
 
        private static final int SWIPE_THRESHOLD = 100;
        private static final int SWIPE_VELOCITY_THRESHOLD = 100;
 
        @Override
        public boolean onDown(MotionEvent e) {
            return true;
        }
 
        @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) {
                            onSwipeRight();
                        } else {
                            onSwipeLeft();
                        }
                    }
                } else {
                    if (Math.abs(diffY) > SWIPE_THRESHOLD && Math.abs(velocityY) > SWIPE_VELOCITY_THRESHOLD) {
                        if (diffY > 0) {
                            onSwipeBottom();
                        } else {
                            onSwipeTop();
                        }
                    }
                }
            } catch (Exception exception) {
                exception.printStackTrace();
            }
            return result;
        }
    }
 
    public void onSwipeRight() {
    }
 
    public void onSwipeLeft() {
    }
 
    public void onSwipeTop() {
    }
 
    public void onSwipeBottom() {
    }
}

Но тут я незнаю несколько методов. Не обьясните, знающие люди? Что за метод onFling? Тут как я понял нужно создавать отдельный класс, а потом из кода обращаться к нему таким методом:
Кликните здесь для просмотра всего текста

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
 background.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View arg0) {
            toggleSomething();
        }
    });
    background.setOnTouchListener(new OnSwipeTouchListener() {
        public boolean onSwipeTop() {
            Toast.makeText(MainActivity.this, "top", Toast.LENGTH_SHORT).show();
            return true;
        }
        public boolean onSwipeRight() {
            Toast.makeText(MainActivity.this, "right", Toast.LENGTH_SHORT).show();
            return true;
        }
        public boolean onSwipeLeft() {
            Toast.makeText(MainActivity.this, "left", Toast.LENGTH_SHORT).show();
            return true;
        }
        public boolean onSwipeBottom() {
            Toast.makeText(MainActivity.this, "bottom", Toast.LENGTH_SHORT).show();
            return true;
        }
    });

И опять же бэкгрунд непонятен.

Добавлено через 51 минуту
Не получается нифига. Может кто то уже делал такой свайп? Поделитесь опытом.
0
1162 / 986 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
04.07.2013, 21:05 8
Цитата Сообщение от Termit___ Посмотреть сообщение
Ошибку выдает на 3 строке(bg.setOn.Touch...)
какую?

Не по теме:

экстрасенса в студию!

0
5 / 5 / 0
Регистрация: 02.04.2013
Сообщений: 88
08.07.2013, 14:44  [ТС] 9
Сделал как сказано здесь: http://savagelook.com/blog/and... in-android
Только анимации не получилось. Просто переходит на новый Активити.
0
0 / 0 / 0
Регистрация: 02.03.2015
Сообщений: 8
03.03.2015, 08:56 10
Тема актуальна, но так и не раскрыта, по ссылке 404.
0
393 / 338 / 83
Регистрация: 17.10.2014
Сообщений: 1,007
03.03.2015, 11:37 11
Цитата Сообщение от Termit___ Посмотреть сообщение
И опять же бэкгрунд непонятен.
вьюха на которую ты вешаешь листенер
Цитата Сообщение от georustam Посмотреть сообщение
Тема актуальна, но так и не раскрыта
да все тут раскрыто, ТС сам же всю реализацию выложил, только прикрутить не смог.
0
0 / 0 / 0
Регистрация: 02.03.2015
Сообщений: 8
03.03.2015, 18:28 12
Честно, вот и я не могу прикрутить...Было бы круто если бы был мануал. Спасибо Вам за ответ.
0
393 / 338 / 83
Регистрация: 17.10.2014
Сообщений: 1,007
04.03.2015, 09:10 13
georustam, эх, давно это было, но как помню все отлично работало)
тут
тут
0
912 / 560 / 88
Регистрация: 13.02.2014
Сообщений: 2,081
04.03.2015, 09:52 14
Не делай свайпы, табы делай.
0
535 / 504 / 114
Регистрация: 12.03.2014
Сообщений: 1,671
04.03.2015, 09:53 15
Эммм, а зачем такое извращение? Есть же ViewPager.
0
0 / 0 / 0
Регистрация: 02.03.2015
Сообщений: 8
04.03.2015, 18:34 16
Как я понял, ViewPager возможен переход только right-left но могу ошибаться. Но данная реализация, как мне кажется может стать удобной для навигации. К примеру, хочу реализовать в приложение меню как при разблокировки экрана, то есть влево "ползунок" наведу - откроется активити1, вправа активити2 и т.д. Было бы еще интересно увидеть, как такой бегунок реализовывают.
0
535 / 504 / 114
Регистрация: 12.03.2014
Сообщений: 1,671
04.03.2015, 22:59 17
georustam, пользователи к такому не привыкли, лучше использовать стандартные методы навигации.
0
0 / 0 / 0
Регистрация: 02.03.2015
Сообщений: 8
06.03.2015, 07:18 18
Spelcrawler, порой они сами не знают чего хотят
0
-1 / 3 / 1
Регистрация: 20.04.2011
Сообщений: 412
11.02.2016, 22:15 19
spydark91, вот тчо выдает на ваш код
(Пытаюсь реализовать свайп между актвити)
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
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.LinearLayout.setOnTouchListener(android.view.View$OnTouchListener)' on a null object reference
 
///////////////////////////////////////////////
package com.example.navigate.potehki_v01; 
 
import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.view.GestureDetector; 
import android.view.MotionEvent; 
import android.view.View; 
import android.widget.LinearLayout; 
import android.widget.Toast; 
 
 
public class MainActivity extends AppCompatActivity { 
private GestureDetector gestureDetector; 
Last Stand 
protected void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.activity_main); 
 
// 
LinearLayout bg = (LinearLayout)findViewById(R.id.activity2); 
bg.setOnTouchListener(new View.OnTouchListener() { 
Last Stand 
public boolean onTouch(View v, MotionEvent event) { 
return false; 
} 
public boolean onSwipeTop() { 
Toast.makeText(MainActivity.this, "top", Toast.LENGTH_SHORT).show(); 
return true; 
} 
public boolean onSwipeRight() { 
Toast.makeText(MainActivity.this, "right", Toast.LENGTH_SHORT).show(); 
return true; 
} 
public boolean onSwipeLeft() { 
Toast.makeText(MainActivity.this, "left", Toast.LENGTH_SHORT).show(); 
return true; 
} 
public boolean onSwipeBottom() { 
Toast.makeText(MainActivity.this, "bottom", Toast.LENGTH_SHORT).show(); 
return true; 
} 
}); 
 
} 
 
}
0
0 / 0 / 0
Регистрация: 02.02.2015
Сообщений: 15
13.03.2016, 18:40 20
Возобновлю тему, есть важный вопрос по ней. При использовании вышеописанного решения, чтение свайпа происходит во всему экрану. А можно ли сделать так, чтобы чтение происходило по какой-то определенной области? например в квадрате со стороной n и т.п.
0
13.03.2016, 18:40
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.03.2016, 18:40
Помогаю со студенческими работами здесь

Навигация в консольном приложении
Здравствуйте. Подскажите пожалуйста каким способом можно реализовать навигацию в таблице в...

Создание меню в консольном приложении и навигация по нему с помощью клавиш
У меня стоит такая задача, допустим есть в консоле такая менюшка: Выберите действие: 1) первое...

Android swipe
Такой глупый вопрос. Сразу не кидайте камне. Как реализовать свайп вправо, как при появлении...

Swipe пример
Дайте, пожалуйста пример простого кода для свайпа. Например провел пальцем по Имейдж вью влево- ...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru