Frage

Ich versuche, eine ViewFlipper zu verwenden und es wie der Home-Bildschirm machen handeln (Das Layout wird mit dem Finger bewegen). Check out this für ein Beispiel. Ich möchte, dies zu tun mit einem ViewFlipper, die nur zwei Kinder enthalten, so sollte die entgegengesetzte Ansicht auf beiden Seiten der aktuellen Ansicht angezeigt werden, je nachdem, wie der Benutzer seine Finger bewegt. Dieser Code funktioniert aber nur für 1 Richtung zu einer Zeit. Dies ist 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());

Was auch immer von den beiden unteren Zeilen Ich habe zuletzt die Richtung richtig funktioniert, aber das andere nicht.

Hier ist, wie ich die leftView und rightView gesetzt:

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

Wird es möglich sein, es so einzurichten, dass die gleiche Ansicht auf beiden Seiten der aktuellen Ansicht angezeigt wird?

War es hilfreich?

Lösung

Danke stealthcopter

Das funktionierte hier ist der neue Code, wenn jemand interessiert ist.

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

        }

Ich zog auch die setVisibility () Aufrufe an das MotionEvent.ACTION_DOWN in einem Versuch einiger Flackern der Ansichten loszuwerden. Dies trug dazu bei, aber ich bekomme immer noch ein wenig.

Andere Tipps

Ich habe vielleicht nicht sehr konstruktiven Vorschlag, aber wenn man es wie ein Home-Bildschirm verhalten wollen, warum Sie nicht in der src dieser , und ändern sie es auf Ihre Bedürfnisse?

Um von flackernden loszuwerden, Set setVisibility(View.INVISIBLE) in MotionEvent.ACTION_DOWN. Der Standardwert ist „GONE“ auf einen Blick. Das bedeutet, dass Sie nicht Set Layout() auf einem Blick, bis es entweder „sichtbar“ oder „Unsichtbar“. So in drei Schritten:

  1. Setzen Sie Sichtbarkeit auf INVISIBLE auf der Ansicht
  2. Set Layout () in der Ansicht
  3. Setzen Sie Sichtbarkeit auf Sichtbar auf der Ansicht

Wenn ich Ihre Anfrage zu verstehen, sollte dieser Effekt nun umgesetzt werden mit einem Ansicht Pager

sieht wie folgt aus:

eingeben Bild Beschreibung hier

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top