Вопрос

Я пытаюсь использовать 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() На вид до тех пор, пока он не будет либо «видимым», так и «невидимым». Так что в три шага:

  1. Установите видимость для невидимой на вид
  2. Установите макет () на вид
  3. Установите видимость для видимости на вид

Если я пойму ваш запрос, этот эффект должен быть реализован с использованием Просмотр пейджера

Похоже:

enter image description here

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top