2010-04-08 5 views
10

Ok Tôi có một ViewFlipper với ba LinearLayouts được lồng trong đó. Nó mặc định để hiển thị cái đầu tiên. Mã này:Tạo ViewFlipper như Màn hình chính bằng MotionEvent.ACTION_MOVE

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

... xử lý chế độ xem lật nhưng hoạt ảnh rất "bật/tắt". Tôi tự hỏi nếu ai đó có thể giúp tôi với phần cuối cùng. Giả sử rằng tôi có thể truy cập LinearLayouts, có cách nào mà tôi có thể thiết lập vị trí của các bố trí dựa trên deltaX và deltaY?

Ai đó đã cho tôi this link và nói tôi nên tham khảo phương pháp applyTransformation để biết các gợi ý về cách thực hiện việc này nhưng tôi không biết cách lặp lại hành vi tương tự này.

Trả lời

10

Di chuyển các điểm trong khi bạn đang di chuyển ngón tay của bạn có thể dễ dàng thực hiện:

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

Bây giờ này chỉ di chuyển giao diện hiện tại, chứ không phải những người hàng xóm. Tôi chưa thử nghiệm điều đó, nhưng chúng có thể được lấy bởi getChildAt:

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

Hy vọng điều đó sẽ hữu ích.

+0

Ok, mà làm việc! Tôi có thể tìm ra phần còn lại của nó, cảm ơn. – DJTripleThreat

1

Nếu tôi hiểu yêu cầu của bạn, hiệu ứng này nên bây giờ sẽ được thực hiện bằng cách sử dụng View Pager

Trông như thế này:

enter image description here

+0

Đây là một cách tiếp cận khác http://www.androiduipatterns.com/2011/06/android-ui-pattern-workspaces.html – Kurru

+0

Bỏ qua liên kết thứ 2 đó, Xem Máy nhắn tin là cách chính xác để thực hiện việc này – Kurru