Einen ViewFlipper wie der Startbildschirm mit MotionEvent.ACTION_MOVE

? DJTripleThreat @ | Original: StackOverFlow
---

Ok ich habe ein ViewFlipper mit drei LinearLayouts darin verschachtelt . Der Standardwert ist, die die erste. Dieser Code :

// Assumptions in my Activity class:
// oldTouchValue is a float
// vf is my view flipper
@Override
public boolean onTouchEvent(MotionEvent touchEvent) {
  switch (touchEvent.getAction()) {
    case MotionEvent.ACTION_DOWN: {
      oldTouchValue = touchEvent.getX();
      break;
    }
    case MotionEvent.ACTION_UP: {
      float currentX = touchEvent.getX();
      if (oldTouchValue < currentX) {
        vf.setInAnimation(AnimationHelper.inFromLeftAnimation());
        vf.setOutAnimation(AnimationHelper.outToRightAnimation());
        vf.showNext();
      }
      if (oldTouchValue > currentX) {
        vf.setInAnimation(AnimationHelper.inFromRightAnimation());
        vf.setOutAnimation(AnimationHelper.outToLeftAnimation());
        vf.showPrevious();
      }
      break;
    }
    case MotionEvent.ACTION_MOVE: {
      // TODO: Some code to make the ViewFlipper
      // act like the home screen.
      break;
    }
  }
  return false;
}

public static class AnimationHelper {
  public static Animation inFromRightAnimation() {
    Animation inFromRight = new TranslateAnimation(
    Animation.RELATIVE_TO_PARENT, +1.0f,
    Animation.RELATIVE_TO_PARENT, 0.0f,
    Animation.RELATIVE_TO_PARENT, 0.0f,
    Animation.RELATIVE_TO_PARENT, 0.0f);
    inFromRight.setDuration(350);
    inFromRight.setInterpolator(new AccelerateInterpolator());
    return inFromRight;
  }

  public static Animation outToLeftAnimation() {
    Animation outtoLeft = new TranslateAnimation(
    Animation.RELATIVE_TO_PARENT, 0.0f,
    Animation.RELATIVE_TO_PARENT, -1.0f,
    Animation.RELATIVE_TO_PARENT, 0.0f,
    Animation.RELATIVE_TO_PARENT, 0.0f);
    outtoLeft.setDuration(350);
    outtoLeft.setInterpolator(new AccelerateInterpolator());
    return outtoLeft;
  }

  // for the next movement
  public static Animation inFromLeftAnimation() {
    Animation inFromLeft = new TranslateAnimation(
    Animation.RELATIVE_TO_PARENT, -1.0f,
    Animation.RELATIVE_TO_PARENT, 0.0f,
    Animation.RELATIVE_TO_PARENT, 0.0f,
    Animation.RELATIVE_TO_PARENT, 0.0f);
    inFromLeft.setDuration(350);
    inFromLeft.setInterpolator(new AccelerateInterpolator());
    return inFromLeft;
  }

  public static Animation outToRightAnimation() {
    Animation outtoRight = new TranslateAnimation(
    Animation.RELATIVE_TO_PARENT, 0.0f,
    Animation.RELATIVE_TO_PARENT, +1.0f,
    Animation.RELATIVE_TO_PARENT, 0.0f,
    Animation.RELATIVE_TO_PARENT, 0.0f);
    outtoRight.setDuration(350);
    outtoRight.setInterpolator(new AccelerateInterpolator());
    return outtoRight;
  }
}

... Übernimmt die Ansicht Spiegeln aber die Animationen sind sehr " an / aus" . Ich frage mich, ob jemand kann mir helfen, mit dem letzten Teil . Unter der Annahme, dass ich die LinearLayouts zugreifen zu können, ist es eine Möglichkeit, wo ich die Position der Layouts auf Basis deltaX und deltaY eingestellt?

Jemand gab mir diesen Link : https://android.git.kernel.org/?p=platform/frameworks/base.git;a=blob;f=core/java/android/view/animation/TranslateAnimation.java;h=d2ff754ac327dda0fe35e610752abb78904fbb66;hb=HEAD und sagte, ich solle auf den applyTransformation Verfahren für Hinweise, wie Sie dies tun, beziehen aber ich weiß nicht, wie ich das gleiche Verhalten zu wiederholen .

---

Top 5 Antwort

1phreezie @

Wenn Sie den Blick, während Sie bewegen Sie den Finger leicht fertig sind :

case MotionEvent.ACTION_MOVE:
    final View currentView = vf.getCurrentView();
    currentView.layout((int)(touchEvent.getX() - oldTouchValue), 
            currentView.getTop(), currentView.getRight(), 
            currentView.getBottom());
break;

Nun ist diese bewegt sich nur die aktuelle Ansicht, nicht die Nachbarn . Habe ich nicht getestet, dass noch nicht, aber die kann wahrscheinlich durch getChildAt erhältlich:

vf.getChildAt(vf.getDisplayedChild() - 1); // previous
vf.getChildAt(vf.getDisplayedChild() + 1); // next

Hoffe, das hilft .

2Kurru @

Wenn ich Ihre Anfrage zu verstehen, sollte dieser Effekt nun mit umgesetzt werden ein http://android-developers.blogspot.com/2011/08/horizontal-view-swiping-with-viewpager.html

Sieht so aus:

Einen ViewFlipper wie der Startbildschirm mit MotionEvent.ACTION_MOVE