Domanda

Sto cercando di utilizzare un ViewFlipper e farlo agire come schermata iniziale (Il layout si muoverà con il dito). Dai un'occhiata a questo per un esempio. Voglio fare questo con un ViewFlipper che contiene solo due bambini in modo che il punto di vista opposto dovrebbe essere mostrato su entrambi i lati della vista corrente a seconda del modo in cui l'utente sposta il dito. Questo codice funziona, ma solo per 1 direzione alla volta. Questo è in 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());

Che mai delle due linee di fondo ho messo ultima quella direzione funzionerà correttamente, ma l'altro non sarà.

Ecco come ho impostato il leftView e 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;
}

E 'intenzione di essere possibile impostarlo in modo che la stessa vista viene visualizzato su entrambi i lati della vista corrente?

È stato utile?

Soluzione

Grazie stealthcopter

che ha lavorato qui è il nuovo codice, se qualcuno è interessato.

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

        }

Ho anche spostato il setVisibility () le chiamate al MotionEvent.ACTION_DOWN nel tentativo di sbarazzarsi di alcuni sfarfallio delle viste. Questo ha aiutato, ma ho ancora ottenere un po '.

Altri suggerimenti

Non ho suggerimento forse non molto costruttivo, ma se si vuole che si comporti come uno schermo di casa, perché non si vuole guardare il src di quel , e modificarlo per le vostre esigenze?

Per sbarazzarsi del tremolio, setVisibility(View.INVISIBLE) set in MotionEvent.ACTION_DOWN. Il valore di default è "andato" su una visione. Ciò significa che non è possibile impostare Layout() su una visione fino a quando è sia "visibile" o "invisibile". Così in tre fasi:

  1. Impostare Visibilità per invisibile sulla vista
  2. Imposta layout () nella vista
  3. Impostare Visibilità per Visibile nel Visualizza

Se ho capito la richiesta, questo effetto dovrebbe ora essere implementato usando un Visualizza Pager

è simile al seguente:

entrare descrizione dell'immagine qui

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top