2012-06-28 5 views
1

내 레이아웃에 3 Views을 표시하고 싶지만 한 번에 2 개만 표시하고 싶습니다. 버튼을 누르면 가장 왼쪽 뷰가 왼쪽으로 미끄러 져 나오고 가운데 하나는 왼쪽 뷰의 시작 공간을 차지하고 가장 오른쪽 뷰는 스크린으로 미끄러 져 들어가야합니다. enter image description here다른보기 후에 새 위치 애니메이션보기 setVisibility (GONE)

이 내입니다 :

애니메이션하기 전에 : enter image description here

애니메이션 후 : 애니메이션 (페인트 편집 ^^) 동안
enter image description here

여기

는 스크린 샷입니다 레이아웃 파일 :

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="horizontal" 
    android:weightSum="3" > 

    <FrameLayout 
     android:id="@+id/stations_stations" 
     android:layout_width="0dp" 
     android:layout_height="match_parent" 
     android:layout_margin="20dp" 
     android:layout_weight="1" 
     android:background="@drawable/fragment_border" /> 

    <FrameLayout 
     android:id="@+id/stations_singlestation" 
     android:layout_width="0dp" 
     android:layout_height="match_parent" 
     android:layout_margin="20dp" 
     android:layout_weight="2" 
     android:background="@drawable/fragment_border" /> 

    <FrameLayout 
     android:id="@+id/stations_trip" 
     android:layout_width="0dp" 
     android:layout_height="match_parent" 
     android:layout_margin="20dp" 
     android:layout_weight="1" 
     android:background="@drawable/fragment_border" 
     android:visibility="gone" /> 

</LinearLayout> 

(10)는 그래서 아래의 코드를 사용하여 화면 밖으로 lefmost보기를 애니메이션 할 수 있어요 :

final View stationsContainer = findViewById(R.id.stations_stations); 
    Animation an = AnimationUtils.loadAnimation(this, R.anim.slide_out_left); 
    stationsContainer.startAnimation(an); 
    an.setAnimationListener(new AnimationListener() { 

     @Override 
     public void onAnimationStart(Animation animation) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void onAnimationRepeat(Animation animation) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void onAnimationEnd(Animation animation) { 
      stationsContainer.setVisibility(View.GONE); 
     } 
    }); 

이 왼쪽으로 창 밖으로 가장 왼쪽 뷰를 애니메이션과 사라로 설정합니다. 중간 뷰를 새 위치에 애니메이션으로 만들 수도 있지만 애니메이션이 완료되면 중간 뷰는 원래 위치로 매우 짧은 시간 동안 점프 한 다음 올바른 위치로 이동합니다. 이 점프를 어떻게 피할 수 있습니까?

+0

은 당신이있는 LinearLayout을 사용하고 View.GONE에 첫 번째의 가시성을 설정 버튼을 눌러에 수 있다고 생각. 그런 다음 다시 원하면 View.VISIBLE로 되돌립니다. Dunno, 애니메이션으로 어떻게 작동할까요? –

+0

그건 내가 지금 가지고있는 것이지만,보기에는 좋지 않습니다. – nhaarman

+0

[TranslateAnimation] (http://developer.android.com/reference/android/view/animation/TranslateAnimation.html)로 놀아보십시오. –

답변

3
  • 사용 LayoutTransistion 클래스로 (보기 중) 오른쪽에서 슬라이드 뷰의 원인이됩니다 때마다 VISIBLEGONE 사이의 가시성 변경 . 이 클래스는 API 11부터 사용할 수 있습니다.

    샘플 코드는 SDK와 함께 제공되는 샘플을 확인하십시오.정확한 경로는 ApiDemos\src\com\example\android\apis\animation\LayoutAnimationsHideShow.java

  • LayoutAnimationController 클래스를 사용하여 뷰 그룹에 추가되거나 뷰 그룹에서 제거 될 때 뷰를 애니메이션으로 만듭니다. 나중에 다시 추가하려는 경우 제거 된 뷰에 대한 참조를 보유해야합니다. 이 클래스는 모든 버전의 Android에서 사용할 수 있습니다.

    샘플 코드 경로 : ApiDemos\src\com\example\android\apis\view\LayoutAnimation

+1

Brilliant. 'LayoutTransition' 클래스를 사용하고 있는데,해야 할 일은'setLayoutTransition (new LayoutTransition())'뿐입니다. 감사! – nhaarman

0

animation을 사용하여 슬라이드 아웃합니다. 리소스를 XML로 정의해야합니다.

See this for example

또는 SO와 웹에 많은 더 많은 예제가 있습니다 당신은 ViewFlipper Try this as an example

사용할 수 있습니다.

0

FrameLayouts를 ViewFlipper에 추가하십시오. 예 : viewFlipper에 코드를 호출 setInAnimation (leftInAnim)와 setOutAnimation (leftOutAnim)에서 다음

<ViewFlipper> 
<FrameLayout1/> 
<FrameLayout2/> 
<FrameLayout3/> 
</ViewFlipper> 

, 애니메이션의 원인이됩니다 showNext()를 호출은 현재 뷰와 다음 뷰에 적용 할 수 있습니다.

leftInAnim 및 leftOutAnim은 현재 애니메이션보기 방법을 시스템에 알려주는 XML 애니메이션 리소스입니다.

<set xmlns:android="http://schemas.android.com/apk/res/android"> 
    <translate android:fromXDelta="-100%p" android:toXDelta="0" 
     android:duration="@android:integer/config_mediumAnimTime"/> 
</set> 

이 자동으로 아이 뷰를 애니메이션으로 현재보기

+0

하지만 한 번에 2 개의보기를 표시 할 수 있습니까? 이제 조회수는 독자적으로 나타납니다. – nhaarman

+0

내 질문을 편집했습니다. 나는'ViewFlipper'가 내가 필요로하는 것과 정확히 같지 않다고 생각한다. – nhaarman

관련 문제