Android ViewFlipper + HomeScreen Animation
-
02-10-2019 - |
Вопрос
Я пытаюсь использовать ViewLixper и сделать его действовать как домашний экран (макет будет двигаться с пальцем). Проверьте это Например. Я хочу сделать это с помощью просмотра, который содержит только два детей, чтобы только противоположный взгляд должен быть показан на обеих стороне текущего представления в зависимости от того, как пользователь перемещает их палец. Этот код работает, но только для 1 направления за раз. Это в Ontuchevent.
case MotionEvent.ACTION_MOVE:
leftView.setVisibility(View.VISIBLE);
rightView.setVisibility(View.VISIBLE);
// move the current view to the left or right.
currentView.layout((int) (touchEvent.getX() - oldTouchValue),
currentView.getTop(),
(int) (touchEvent.getX() - oldTouchValue) + 320,
currentView.getBottom());
// place this view just left of the currentView
leftView.layout(currentView.getLeft() - 320, leftView.getTop(),
currentView.getLeft(), leftView.getBottom());
// place this view just right of the currentView
rightView.layout(currentView.getRight(), rightView.getTop(),
currentView.getRight() + 320, rightView.getBottom());
Что когда-либо внизу две линии я поставили в последний раз, что направление будет работать правильно, но другой не будет.
Вот как я установил левый и правый вид:
final View currentView = myFlipper.getCurrentView();
final View leftView, rightView;
if (currentView == meView) {
Log.d("current layout: ", "me");
leftView = youView;
rightView = youView;
} else if (currentView == youView) {
Log.d("current layout: ", "you");
leftView = meView;
rightView = meView;
} else {
leftView = null;
rightView = null;
}
Это будет возможно настроить его так, чтобы одинакового представления отображается с обеих сторон текущего представления?
Решение
Спасибо Stealthcopter
Это работало здесь новый код, если кто-то заинтересован.
if (touchEvent.getX() < oldTouchValue){
// place this view just right of the currentView
rightView.layout(currentView.getRight(), rightView.getTop(),
currentView.getRight() + 320, rightView.getBottom());
}else if (touchEvent.getX() > oldTouchValue) {
// place this view just left of the currentView
leftView.layout(currentView.getLeft() - 320, leftView.getTop(),
currentView.getLeft(), leftView.getBottom());
}
Я также переместил вызовы SETVisibility () к Motionevent.cont_down, пытаясь избавиться от мерцания видов. Это помогло, но я все еще немного получаю.
Другие советы
У меня возможно не очень конструктивное предложение, но если вы хотите, чтобы он вел, как домашний экран, почему вы не хотите смотреть на SRC этого, И измените его к вашим потребностям?
Чтобы избавиться от мерцаний, установить setVisibility(View.INVISIBLE)
в MotionEvent.ACTION_DOWN
. Отказ Значение по умолчанию «ушло» на вид. Это означает, что вы не можете установить Layout()
На вид до тех пор, пока он не будет либо «видимым», так и «невидимым». Так что в три шага:
- Установите видимость для невидимой на вид
- Установите макет () на вид
- Установите видимость для видимости на вид
Если я пойму ваш запрос, этот эффект должен быть реализован с использованием Просмотр пейджера
Похоже: