2012-05-07 3 views
2

새로운 조각이 나타날 때 조각을 부분적으로 숨기고 싶습니다. Fragment Animation like Gmail Honeycomb App조각이 부분적으로 오프 스크린이되도록 애니메이션하기

에 참조 된 나는, GitHub의에 ScienceGuy의 코드에 건물입니다

나는 세 조각으로 시작합니다. 가장 왼쪽의 무게는 6, 가운데 무게는 4의 무게, 가장 오른쪽의 무게는 4입니다. weightSum을 10으로 설정하면 왼쪽과 가운데 조각이 나타나고 가장 오른쪽이 화면을 벗어납니다. 이것이 내가 원하는거야.

사용자가 중간 조각에서 항목을 선택하면 왼쪽 조각을 전환하여 화면의 왼쪽에서 3 분의 2가 움직 이도록합니다. 무게 때문에, 나는 효과적으로 2, 4, 4가 될 것입니다.이 시점에서, 오른쪽 단편이 화면 위로 완전히 이동했습니다.

ScienceGuy의 코드를 사용하면 왼쪽 단편을 스크롤 오프 할 때 오른쪽 단편을 얻을 수 있지만 왼쪽 단편은 완전히 사라집니다.

나는 다음과 같은 코드를 사용하여 시도 :

final float middleFragmentWidth = getMiddleFragment().getView().getWidth(); 
ObjectAnimator animIn = ObjectAnimator.ofFloat(null, "x", 
     -middleFragmentWidth/2, 0).setDuration(
     trans.getDuration(LayoutTransition.APPEARING)); 
trans.setAnimator(LayoutTransition.APPEARING, animIn); 


ObjectAnimator animOut = ObjectAnimator.ofFloat(null, "x", -middleFragmentWidth, 
     -middleFragmentWidth/2).setDuration(
      trans.getDuration(LayoutTransition.CHANGE_DISAPPEARING)); 
trans.setAnimator(LayoutTransition.DISAPPEARING, animOut); 

내가 안드로이드 하나를 "숨 깁니다"때 조각이 완전히 숨겨져 것으로 기대하고 있다고 생각한다. 실제로는 숨겨져 있지 않지만 부분적으로 화면이 꺼지지 않도록 조각을 애니메이션하는 방법이 있습니까?

또는 세 개의 조각을 HorizontalScrollView에 넣고 애니메이션으로 시도해 볼 수도 있습니다. 그러나, 중간 및 오른쪽 대부분의 조각에는 listviews가 포함되어 있고 HorizontalScrollView 내에서 listview를 사용하면 피해야합니다 (according to the docs).

+0

안녕하세요. 저는 같은 문제에 직면하고 있습니다. 이 문제가 해결 되었습니까? – Dhaval

+0

LinearLayout에 기반한 커스텀 뷰 생성이 끝났습니다. 내 질문에 예를 들어 대답하겠습니다. –

답변

3

장치의 너비의 150 % 인 LinearLayout을 기반으로 사용자 지정보기가 만들어졌습니다.

public class AutoSizingLinearLayout extends LinearLayout { 
    private static final String TAG = AutoSizingLinearLayout.class.getSimpleName(); 
    final int myWidth; 

public AutoSizingLinearLayout(Context context, AttributeSet attrs) { 
    super(context, attrs); 
    myWidth = setScaledWidth(context); 
} 

public AutoSizingLinearLayout(Context context) { 
    super(context); 
    myWidth = setScaledWidth(context); 
} 

private int setScaledWidth(Context context) { 
    if (this.isInEditMode()){ 
     return 1000; 
    } else { 
     WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); 
     return (int) (1.5 * wm.getDefaultDisplay().getWidth()); 
    } 
} 

@Override 
public android.view.ViewGroup.LayoutParams getLayoutParams() { 
    android.view.ViewGroup.LayoutParams params = super.getLayoutParams(); 
    params.width = myWidth; 
    return params; 
} 

그런 다음이 애니메이션을 적용합니다.

    ObjectAnimator a = ObjectAnimator.ofFloat(linearView,"translationX", -scrollamount).setDuration(900); 
       a.start(); 
관련 문제