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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 32, средняя оценка - 4.91
Termit___
5 / 5 / 0
Регистрация: 02.04.2013
Сообщений: 85
04.07.2013, 16:06     Swipe навигация в приложении #1
Здравствуйте.
Возникла потребность в навигации между активити жестами(свайп). Ведешь пальцем влево и переходит в нужное активити.
Нагуглил я очень много всего, куча всяких разных методов, все очень громозкое и сложное.
Хочется просто в обработчик запихать интент с передачей данных и открытие нового класса(нового активити). С этим проблемм нет. Проблема в том что не знаю подходящего метода для свайпа. Может кто подскажет? Буду благодарен.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
spydark91
84 / 84 / 2
Регистрация: 03.03.2011
Сообщений: 1,872
04.07.2013, 16:10     Swipe навигация в приложении #2
Перелистывание экранов
Termit___
5 / 5 / 0
Регистрация: 02.04.2013
Сообщений: 85
04.07.2013, 16:16  [ТС]     Swipe навигация в приложении #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;
        }
    });


ТОлько я пока не совсем понимаю как это прикрутить к моему случаю.
spydark91
84 / 84 / 2
Регистрация: 03.03.2011
Сообщений: 1,872
04.07.2013, 16:22     Swipe навигация в приложении #4
если правильно понял то на жест влево вызываем активити 1, на жест вправо активити 2 и тд
ну вставляем примерно такой код, создающий новую активность в код приведенный вами выше
Java
1
2
                            Intent intent = new Intent(getActivity(), userImgDialog_Activity.class);                
                            startActivity(intent);
Termit___
5 / 5 / 0
Регистрация: 02.04.2013
Сообщений: 85
04.07.2013, 16:24  [ТС]     Swipe навигация в приложении #5
Да что вставлять понятно, а вот с тем кодом что я выложил непонятно. Что за background? Чем его заменить? Его объявлять нужно в начали или что? Не пойму чему нужно присваивать этот листнер. Поидее работать должно на всем экране.
spydark91
84 / 84 / 2
Регистрация: 03.03.2011
Сообщений: 1,872
04.07.2013, 16:30     Swipe навигация в приложении #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;
}
});
попробуйте
Termit___
5 / 5 / 0
Регистрация: 02.04.2013
Сообщений: 85
04.07.2013, 17:44  [ТС]     Swipe навигация в приложении #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 минуту
Не получается нифига. Может кто то уже делал такой свайп? Поделитесь опытом.
V0v1k
1157 / 981 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
04.07.2013, 21:05     Swipe навигация в приложении #8
Цитата Сообщение от Termit___ Посмотреть сообщение
Ошибку выдает на 3 строке(bg.setOn.Touch...)
какую?

Не по теме:

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

Termit___
5 / 5 / 0
Регистрация: 02.04.2013
Сообщений: 85
08.07.2013, 14:44  [ТС]     Swipe навигация в приложении #9
Сделал как сказано здесь: http://savagelook.com/blog/android/s...ion-in-android
Только анимации не получилось. Просто переходит на новый Активити.
georustam
0 / 0 / 0
Регистрация: 02.03.2015
Сообщений: 8
03.03.2015, 08:56     Swipe навигация в приложении #10
Тема актуальна, но так и не раскрыта, по ссылке 404.
androbro
312 / 272 / 51
Регистрация: 17.10.2014
Сообщений: 819
03.03.2015, 11:37     Swipe навигация в приложении #11
Цитата Сообщение от Termit___ Посмотреть сообщение
И опять же бэкгрунд непонятен.
вьюха на которую ты вешаешь листенер
Цитата Сообщение от georustam Посмотреть сообщение
Тема актуальна, но так и не раскрыта
да все тут раскрыто, ТС сам же всю реализацию выложил, только прикрутить не смог.
georustam
0 / 0 / 0
Регистрация: 02.03.2015
Сообщений: 8
03.03.2015, 18:28     Swipe навигация в приложении #12
Честно, вот и я не могу прикрутить...Было бы круто если бы был мануал. Спасибо Вам за ответ.
androbro
312 / 272 / 51
Регистрация: 17.10.2014
Сообщений: 819
04.03.2015, 09:10     Swipe навигация в приложении #13
georustam, эх, давно это было, но как помню все отлично работало)
тут
тут
Rube
910 / 558 / 87
Регистрация: 13.02.2014
Сообщений: 2,064
04.03.2015, 09:52     Swipe навигация в приложении #14
Не делай свайпы, табы делай.
Spelcrawler
521 / 491 / 110
Регистрация: 12.03.2014
Сообщений: 1,641
Завершенные тесты: 1
04.03.2015, 09:53     Swipe навигация в приложении #15
Эммм, а зачем такое извращение? Есть же ViewPager.
georustam
0 / 0 / 0
Регистрация: 02.03.2015
Сообщений: 8
04.03.2015, 18:34     Swipe навигация в приложении #16
Как я понял, ViewPager возможен переход только right-left но могу ошибаться. Но данная реализация, как мне кажется может стать удобной для навигации. К примеру, хочу реализовать в приложение меню как при разблокировки экрана, то есть влево "ползунок" наведу - откроется активити1, вправа активити2 и т.д. Было бы еще интересно увидеть, как такой бегунок реализовывают.
Spelcrawler
521 / 491 / 110
Регистрация: 12.03.2014
Сообщений: 1,641
Завершенные тесты: 1
04.03.2015, 22:59     Swipe навигация в приложении #17
georustam, пользователи к такому не привыкли, лучше использовать стандартные методы навигации.
georustam
0 / 0 / 0
Регистрация: 02.03.2015
Сообщений: 8
06.03.2015, 07:18     Swipe навигация в приложении #18
Spelcrawler, порой они сами не знают чего хотят
correcеt
 Аватар для correcеt
-1 / 3 / 1
Регистрация: 20.04.2011
Сообщений: 412
11.02.2016, 22:15     Swipe навигация в приложении #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; 
} 
}); 
 
} 
 
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.03.2016, 18:40     Swipe навигация в приложении
Еще ссылки по теме:

Android Навигация свайпом. ListView
Странное поведение swipe-to-dismiss RecyclerView Android
Swipe переключение Android
Android Swipe пример
Раздельная навигация по GPS или по Glonass Android

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

Или воспользуйтесь поиском по форуму:
MrStuff88
0 / 0 / 0
Регистрация: 02.02.2015
Сообщений: 15
13.03.2016, 18:40     Swipe навигация в приложении #20
Возобновлю тему, есть важный вопрос по ней. При использовании вышеописанного решения, чтение свайпа происходит во всему экрану. А можно ли сделать так, чтобы чтение происходило по какой-то определенной области? например в квадрате со стороной n и т.п.
Yandex
Объявления
13.03.2016, 18:40     Swipe навигация в приложении
Ответ Создать тему
Опции темы

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