С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

Программирование Android

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 32, средняя оценка - 4.91
Termit___
5 / 5 / 0
Регистрация: 02.04.2013
Сообщений: 85
#1

Swipe навигация в приложении - Программирование Android

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

Здравствуйте.
Возникла потребность в навигации между активити жестами(свайп). Ведешь пальцем влево и переходит в нужное активити.
Нагуглил я очень много всего, куча всяких разных методов, все очень громозкое и сложное.
Хочется просто в обработчик запихать интент с передачей данных и открытие нового класса(нового активити). С этим проблемм нет. Проблема в том что не знаю подходящего метода для свайпа. Может кто подскажет? Буду благодарен.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.07.2013, 16:06
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Swipe навигация в приложении (Программирование Android):

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

swipe в android 2.1 - Программирование Android
Подскажите как можно сделать переход по activity с помощью swipe для android 2.1? И можно ли вообще? Eclipse при создании проекта позволяет...

Swipe переключение - Программирование Android
Всем привет! Решил реализовать swipe-листание,но ничего не получается. все сайты пооблазил,так и ничего не понял. Листать листается,а вот...

Как реализовать swipe меню - Программирование Android
Подскажите как реализовать подобное меню.

Swipe к TextView или Button - Программирование Android
Можно ли применить Swipe не конкретно для каждого активити, а к TextView, или, например, Button, чтобы когда проводишь справа налево по...

[Swipe, Fragment] - интерфейс как у маркета - Программирование Android
Приветствую, которую неделю туплю и не могу сделать интерфейс как у маркета. Задача, сделать интерфейс, чтобы жестом пальца можно было...

19
spydark91
85 / 85 / 2
Регистрация: 03.03.2011
Сообщений: 1,873
04.07.2013, 16:10 #2
Перелистывание экранов
0
Termit___
5 / 5 / 0
Регистрация: 02.04.2013
Сообщений: 85
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
spydark91
85 / 85 / 2
Регистрация: 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
Termit___
5 / 5 / 0
Регистрация: 02.04.2013
Сообщений: 85
04.07.2013, 16:24  [ТС] #5
Да что вставлять понятно, а вот с тем кодом что я выложил непонятно. Что за background? Чем его заменить? Его объявлять нужно в начали или что? Не пойму чему нужно присваивать этот листнер. Поидее работать должно на всем экране.
0
spydark91
85 / 85 / 2
Регистрация: 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
Termit___
5 / 5 / 0
Регистрация: 02.04.2013
Сообщений: 85
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
V0v1k
1159 / 983 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
04.07.2013, 21:05 #8
Цитата Сообщение от Termit___ Посмотреть сообщение
Ошибку выдает на 3 строке(bg.setOn.Touch...)
какую?

Не по теме:

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

0
Termit___
5 / 5 / 0
Регистрация: 02.04.2013
Сообщений: 85
08.07.2013, 14:44  [ТС] #9
Сделал как сказано здесь: http://savagelook.com/blog/android/s...ion-in-android
Только анимации не получилось. Просто переходит на новый Активити.
0
georustam
0 / 0 / 0
Регистрация: 02.03.2015
Сообщений: 8
03.03.2015, 08:56 #10
Тема актуальна, но так и не раскрыта, по ссылке 404.
0
androbro
332 / 293 / 63
Регистрация: 17.10.2014
Сообщений: 866
03.03.2015, 11:37 #11
Цитата Сообщение от Termit___ Посмотреть сообщение
И опять же бэкгрунд непонятен.
вьюха на которую ты вешаешь листенер
Цитата Сообщение от georustam Посмотреть сообщение
Тема актуальна, но так и не раскрыта
да все тут раскрыто, ТС сам же всю реализацию выложил, только прикрутить не смог.
0
georustam
0 / 0 / 0
Регистрация: 02.03.2015
Сообщений: 8
03.03.2015, 18:28 #12
Честно, вот и я не могу прикрутить...Было бы круто если бы был мануал. Спасибо Вам за ответ.
0
androbro
332 / 293 / 63
Регистрация: 17.10.2014
Сообщений: 866
04.03.2015, 09:10 #13
georustam, эх, давно это было, но как помню все отлично работало)
тут
тут
0
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,072
04.03.2015, 09:52 #14
Не делай свайпы, табы делай.
0
Spelcrawler
527 / 497 / 111
Регистрация: 12.03.2014
Сообщений: 1,663
Завершенные тесты: 1
04.03.2015, 09:53 #15
Эммм, а зачем такое извращение? Есть же ViewPager.
0
04.03.2015, 09:53
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.03.2015, 09:53
Привет! Вот еще темы с ответами:

Странное поведение swipe-to-dismiss RecyclerView - Программирование Android
После удаления свайпом элемента списка остаётся небольшой пробе между элементами, сложно объяснить, поэтому вот ссылка на то, что...

Пример простейшего приложения со swipe-меню на Android - Программирование Android
доброго времени суток не могли бы подсказать где можно взять пример самого просто приложения (или поделиться ссылкой на инфу) со свайп...

навигация приложения - Программирование Android
Как правильно сделать верхнее меню для приложения, на подобии такого: http://s2.ipicture.ru/uploads/20130830/UjJZYdkz.png Я...

WebView. Навигация свайпом - Программирование Android
Здравствуйте! Есть WebView, статьи в который подгружаются из res/raw (n1.txt - n...txt), одна статья - один файл. Как свайпом осуществить...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

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