Question

Je suis en train d'utiliser un ViewFlipper et la faire agir comme l'écran d'accueil (La mise en page se déplace avec votre doigt). Vérifiez cette pour un exemple. Je veux faire cela avec un ViewFlipper qui ne contient que deux enfants, la vue opposée doit être indiquée sur chaque côté de la vue actuelle selon la façon dont l'utilisateur déplace son doigt. Ce code fonctionne mais seulement pour 1 direction à la fois. Ceci 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());

Quelle que des deux lignes de fond, je mets la dernière cette direction va fonctionner correctement, mais l'autre ne sera pas.

Voici comment je mets le leftView et 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;
}

Est-ce que ça va être possible de le configurer de sorte que le même point de vue est affiché sur les deux côtés de la vue actuelle?

Était-ce utile?

La solution

Merci stealthcopter

Cela a fonctionné ici est le nouveau code si quelqu'un est intéressé.

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

        }

J'ai aussi déplacé les appels setVisibility () à la MotionEvent.ACTION_DOWN pour tenter de se débarrasser de certains vacillante des vues. Cela a permis, mais je reçois un peu encore.

Autres conseils

Je suggestion peut-être pas très constructif, mais si vous voulez qu'il se comporte comme un écran d'accueil, pourquoi vous ne voulez pas regarder le src de cette , et le modifier à vos besoins?

Pour se débarrasser du vacillement, ensemble setVisibility(View.INVISIBLE) dans MotionEvent.ACTION_DOWN. La valeur par défaut est « gone » sur une vue. Cela signifie que vous ne pouvez pas définir Layout() sur une vue jusqu'à ce qu'il soit « VISIBLE » ou « INVISIBLE ». Ainsi, en trois étapes:

  1. Définir la visibilité à INVISIBLE sur la vue
  2. Définir la mise en page () dans la vue
  3. Définir la visibilité Visible sur la vue

Si je comprends votre demande, cet effet devrait maintenant être mis en œuvre en utilisant un Voir Pager

On dirait ceci:

entrer image description ici

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top