2011-12-13 2 views
0

Facebook 앱의 새 메뉴 슬라이더를 복제하려고합니다. 왼쪽에서 오는 슬라이더를 만드는 것은 충분히 쉽습니다. 그러나 페이스 북 앱은 액티비티의 레이아웃을 가져 와서 오른쪽으로 슬라이드합니다. 왼쪽 가장자리의 작은 부분 만 화면의 오른쪽에 계속 표시됩니다. 나는 이것을 어떻게하는지 혼란 스럽다. 누구든지 아이디어가 있습니까?화면 밖에서 작업 레이아웃을 오프셋하는 중

제가 생각할 수있는 가장 좋은 방법은 Display 클래스를 사용하여 화면 너비를 결정하고 가장 바깥 쪽보기의 너비를 설정 한 다음 오른쪽에 표시하는 것입니다. 슬라이더 (분명히 RelativeView에 의해 포장 됨).

업데이트 : 다음을 시도했습니다.

내 가장 외곽에있는보기는 상대적 레이아웃입니다. 이 RelativeLayout에는 2 개의 형제 뷰가 있습니다. 둘 다 LinearLayouts입니다. 첫 번째 것은 사이드 바를 포함하고있는 레이아웃입니다 (XML에서 이것은 include를 통해 완성됩니다). 상단에있는 두 번째 레이아웃은 Activity (사용자가 일반적으로 볼 수있게하려는 화면)의 본문을 포함하는 레이아웃입니다. 사용자가하여 ImageButton을 클릭하면, 나는 몇 가지 애니메이션 코드를 사용

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:background="@color/black" > 

    <include 
     android:id="@+id/mainnew_slider" 
     layout="@layout/layout_slidermenu" /> 

    <LinearLayout 
     android:id="@+id/mainfeed_mainlayout" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:background="@drawable/loginbg" 
     android:orientation="vertical" > 

     <LinearLayout 
      android:layout_width="fill_parent" 
      android:layout_height="64dip" 
      android:background="@drawable/titlebar_background" 
      android:orientation="vertical" 
      android:padding="4dip" > 

      <ImageButton 
       android:id="@+id/mainfeed_slider" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:background="@drawable/selector_titlebar_button" 
       android:src="@drawable/sidebarico" /> 
     </LinearLayout> 

     <LinearLayout 
      android:layout_width="fill_parent" 
      android:layout_height="1dip" 
      android:background="@color/store_toolbar_bottom_border" /> 
    </LinearLayout> 

</RelativeLayout> 

이 오른쪽에있는 메인 레이아웃 이동을 할 :

여기 내 XML이다. 내가 메인 레이아웃을 애니메이션하기 위해 사용하는 코드는 다음과 같습니다

 AnimationSet set = new AnimationSet(true); 
     Animation animation = 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 
     ); 
     animation.setDuration(1000); 
     set.addAnimation(animation); 

     LayoutAnimationController controller = new LayoutAnimationController(set, 0.0f); 
     LinearLayout main = (LinearLayout) findViewById(R.id.mainfeed_mainlayout); 
     main.setLayoutAnimation(controller); 

내가 슬라이더 버튼을 클릭

, 두 오른쪽에있는 메인 레이아웃 슬라이드의 자녀가 아니라 메인 레이아웃 자체 (의 배경 정적 유지). 애니메이션이 완료되면 모든 것이 원래 위치로 돌아갑니다.

왜 전체 주 레이아웃을 옮기고 그 휴게소에 보관하지 않는지 이해할 수 없습니다.

답변

1

최상위보기에 간단한 TranslateAnimation을 적용하면됩니다. 레이아웃을 통해하지 마십시오. 너무 느립니다.

+0

나는 아직도 길을 잃었습니다. 두 개의 LinearLayout 자식이 들어있는 RelativeLayout이 있습니다. 아이들 중 하나가 내 슬라이더입니다. 다른 하나는 제 주요 레이아웃입니다. 레이아웃의 layout_toRightOf를 슬라이더의 id로 설정했습니다. 앱이 충돌합니다. layout_toRightOf를 제거하면 TranslateAnimation이 슬라이더를 뷰로 가져 오지만 기본 레이아웃이 화면의 오른쪽에서 푸시되지 않습니다. – Andrew

+0

Re. '그냥 충돌', Logcat에 유익한 예외 정보가 있습니다. –

+0

layout_toRightOf를 사용하지 마십시오. 슬라이더를 논리적으로 기본 레이아웃 상단에 놓습니다. 오른쪽으로 애니메이션을 적용하려는 기본 레이아웃이므로 슬라이더가 포함 된 최상위 레벨이 아닌 애니메이션에 적용하십시오. –

관련 문제