Android: следующий / предыдущий бросок, который прилипает к пальцу, как на главном экране - PullRequest
3 голосов
/ 20 января 2011

Я хочу придать своему приложению приятный вид, позволяя пользователям перемещать страницу влево или вправо, а не просто нажимать кнопки «Следующая / Предыдущая» (аналогично домашнему экрану).

Каков наилучший способ сделать это? Я предполагаю, что мне придется переопределить один из Activity.on... методов, и что мне также нужно будет поместить основной View моей страницы в ViewGroup, который позволяет мне перемещать страницы влево и вправо.

Ответы [ 5 ]

3 голосов
/ 27 июля 2011

В наши дни решение стало еще проще благодаря выпуску пакета обеспечения совместимости r3.Вы можете скачать здесь: http://developer.android.com/sdk/compatibility-library.html

Включает

  • ViewPager: группа ViewGroup, которая управляет макетом дочерних представлений, между которыми пользователь может проводить пальцем.
  • PagerAdapter: Адаптер, который заполняет ViewPager представлениями, представляющими каждую страницу.

и их версии Fragment, если вы склонны таким образом.

Код пейджера совместим с версией API 4 (1.6), и я только что реализовал динамически генерируемый viewPager, выходящий из динамически генерируемого ListView, примерно через 2 часа.Я новичок, так что это определенно предпочтительный путь.

Здесь есть пример приложения: http://geekyouup.blogspot.com/2011/07/viewpager-example-from-paug.html

3 голосов
/ 20 января 2011

ViewFlipper - ваш друг!

Здесь вы можете увидеть хорошее видео о ViewFlipper в действии, а также очень хороший учебник:

http://www.inter -fuser.com / 2009/07 / андроид-Transistions-слайд-в-и-slide.html

0 голосов
/ 20 октября 2011

мы не можем использовать просмотр галереи здесь ??с помощью адаптера вся страница может быть накачана внутри переходника вида галереи getView (), и он отлично справится с прокруткой влево-вправо.

0 голосов
/ 21 января 2011

Используйте GestureDetector, чтобы определить, является ли событие касания прокруткой.

Если первым событием первого вызова onScroll является ACTION_DOWN, то вы должны увидеть, была ли это горизонтальная прокрутка с преобладанием. Если это так, то ваша прокрутка запускается, и вы должны сместить абсолютную позицию представления, которое заполняет страницу.

Об абсолютном позиционировании, не осуждаемом, см. Мой ответ здесь Android: альтернатива AbsoluteLayout (мне действительно нужно абсолютное позиционирование)

Вы захотите получить предупреждение о том, возвращаете ли вы true, чтобы использовать события касания или нет.

GestureDetector не имеет обратного вызова для остановки прокрутки. Перед вызовом GestureDetector.onTouchEvent вам нужно будет проверить, был ли ACTION_UP, и если было выполнено действие, и у вас действительно была незавершенная прокрутка, вам следует установить абсолютную позицию в месте назначения и использовать TranslateAnimation, чтобы он выглядел хорошо. перемещение от текущего к месту назначения.

Edit:

GestureDetector не работал вообще, если дочерние представления также хотели реагировать на сенсорные события. Я закончил тем, что создал подкласс FrameLayout (один из самых основных макетов и наиболее близкий к неинтрузивному родительскому представлению) и переопределил dispatchTouchEvent. Я просто взял все события и сам обнаружил.

0 голосов
/ 20 января 2011

Если вы хотите переключаться между двумя действиями, возможно, вы можете применить этот анимированный переход:

Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
startActivity(intent);
finish();
//transition using XML view animations
overridePendingTransition(R.anim.slideinfromright, R.anim.slideouttoleft);
...