Pregunta

Estoy intentando utilizar un ViewFlipper y hacerlo actuar como la pantalla de inicio (La disposición se moverá con el dedo). Control hacia fuera este para ver un ejemplo. Quiero hacer esto con un ViewFlipper que sólo contiene dos hijos por lo que el punto de vista opuesto debe ser mostrado a ambos lados de la vista actual en función de la forma en que el usuario mueve su dedo. Este código funciona, pero sólo para 1 dirección a la vez. Esto está en onTouchEvent.

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());

Sea cual sea la de las dos líneas de fondo puse última dirección que va a funcionar correctamente, pero el otro no lo hará.

Así es como me puse la leftView y RightView:

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;
}

¿Va a ser posible configurarlo de modo que la misma vista se muestra a ambos lados de la vista actual?

¿Fue útil?

Solución

Gracias stealthcopter

Eso trabajó aquí está el nuevo código si alguien está interesado.

        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());

        }

También se trasladó la setVisibility () llama a la MotionEvent.ACTION_DOWN en un intento de deshacerse de algo de parpadeo de las vistas. Esto ayudó, pero sigo teniendo un poco.

Otros consejos

Tengo sugerencia posiblemente no muy constructiva, pero si quieres que se comporte como una pantalla de inicio, ¿por qué no desea mirar el src de ese , y modificarlo para sus necesidades?

Para deshacerse del parpadeo, juego setVisibility(View.INVISIBLE) en MotionEvent.ACTION_DOWN. El valor por defecto es "Gone" en una vista. Eso significa que no se puede conjunto Layout() en una visión hasta que es ya sea "visible" o "invisible". Así pues, en tres pasos:

  1. Establezca Visibilidad para invisible en la vista
  2. Set Layout () en la Vista
  3. Establecer Visibilidad Visible en la Vista

Si entiendo su solicitud, este efecto debe llevarse a efecto mediante un Ver Pager

tiene este aspecto:

introducir descripción de la imagen aquí

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top