Классный подход для каких-нибудь читалок. Хотя, если читалка, то всё-таки лучше было бы реализовать полноценный page turn effect, тогда и ViewFlipper особо не нужен, потому что всю логику можно поместить в {currentView, prevView, nextView}, анимировать между ними, кэшируя более «далекие» элементы с неким, экономя память на хранении в контейнере.
вскольз посмотрел статью…
если правильно понял, что получиться в этиге, то это слайдинг для бедных какой-то.
под нормальным слайдинго я подразумеваю такое как в TweetDeck, GO Sms pro, лаучнерах между экранами.
Просто когда понадобилось сделать слайдинг, везде описан вариант похожий на ваш, а как сделать такое как в TweetDeck — так и не нашел, сначала изобретал велосипед, потом посмотрел в исходниках анродида как они сделали в своем ланчере.
По-моему, когда слайдинг начинается после отпускания, то создается впечатление, что телефон глючит. Горизонтальный слайдинг должен быть таким же, как и вертикальный, т.е. контент должен прокручиваться непосредственно под пальцем, то бишь в реальном времени.
В качестве примера такого слайдинга могу привести Pulse News и YouTube.
Это не сложно добавить, нужно заменить событие ACTION_UP на ACTION_MOVE (т.е. на перемещение, а не отпускание) и немного модифицировать код обработки, чтобы он срабатывал не сразу после начала перемещения, а после какого-то промежутка.
а можно
— воспользоваться ViewGroup и стандартным скроллером (методом scrollTo);
— правильно обрабатывать отпускание (доскролить до конца в какую-то из сторон);
— на onLayout, упорядочить все сабвью и делать их тогоже размера, что и наш ViewGroup;
— важно еще правильно редиректить события, что бы нажатия на дочерних элементах работали.
когда сам пытался это сделать, ничего путнего в интернетах не нашел, в итоге сделал велосипед через FrameView и когда пользователь начинал перетаскивание, показывал следующее View и сдвигал его анимацией… потом нашел гугло-реализацию, переделал абсолютно все.
теперь код примерно такой-же как и по приведенной вами ссылке.
Есть табы и заходя в один из табов необходимо переходить между экранами туда-сюда, при это сами табы должны оставаться на своих местах? При этом не хочется смешивать логику и представления в одном вью( а как иначе если использовать ViewFlipper?). Так вот, ViewFlipper поможет все таки? На сколько я понимаю, он листает только наследники View, а у меня есть Activity, логика в них и лэйауты отдельные для каждого экрана.
Что можете посоветовать?
Использование ActivityGroup приводит к StackOverFlow, точнее вложенность вьюшек(хотя их вложенность явно меньше 10)
На самом деле очень простое но не очень удачное решение, для именно такого эффекта лучше использовать подход аналогичный рабочим столам, потому что пользователю постоянно работает с ними и привык получать отзыв в виде сдвига view до того как он отпускает палец.
Я имел ввиду эффект смены рабочих столов, к которому так привыкли пользователи. Когда изображение смещается пропорционально изменению координат в ACTION_MOVE(на каждом событии), а окончательный переход на рабочий стол происходит после ACTION_UP в зависимости от того было ли итоговое смещение положительным или отрицательным. К сожалению описанным выше способом не получится этого сделать.
Переменная должна быть объявлена вне метода иначе она будет перезаписана, т.е. должна быть объявлена внутри класса.
В статье есть линк на исходники, посмотрите, там все понятно.
А toPosition зачем вы вынесли? Вообщем возьмите проект по ссылке, попробуйте разобраться в нем (для этого и была статья), а потом попробуйте запустить его.
Причин почему может не работать может быть много, догадаться что именно произошло у вас по трем строчкам невозможно.
Sliding экранов внутри приложения