주 레이아웃의 일부인 사용자 지정 검색 패널이 있습니다. 대부분의 경우 패널은 숨겨져 있습니다. 나는 패널에 나타나는/사라지는 애니메이션을 추가하고 싶다. 여기에 단순화 된 레이아웃 발췌 한 것입니다GONE 애니메이션 작업을 쉽게 수행하는 방법
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<RelativeLayout
android:id="@+id/layoutSearch"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:visibility="gone" >
<EditText
android:id="@+id/editSearch"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
<<Other inner views to be animated>>
</RelativeLayout>
<<Other views, which should not be affected by the animation>>
</LinearLayout>
는 시도는 1 : 나는 애니메이션 리소스를 추가하고 XML에서이 라인으로 @ 아이디/layoutSearch에 첨부 :
android:layoutAnimation="@anim/search_in_layout"
ANIM/search_in.xml :
<translate
xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/overshoot_interpolator"
android:fromYDelta="-100%p"
android:toYDelta="0"
android:duration="@android:integer/config_longAnimTime" />
ANIM/search_in_layout.xml :
<layoutAnimation
xmlns:android="http://schemas.android.com/apk/res/android"
android:animation="@anim/search_in" />
애니메이션은 정상적으로 작동하지만 패널이 나타나는 경우에만 작동합니다.
mSearchLayout.setVisibility(View.GONE);
시도 2 : 나는 그것을 숨길 때 패널은 애니메이션없이 한 순간에 사라 내가 애니메이션 대상 매개 변수는 현재 패널의 위치를 일치로 위의 솔루션이 작동하지 않는 것 같아요. 좋아, 나는 anim/search_out.xml과 anim/search_out_layout.xml이라는 두 개의 애니메이션 리소스를 추가로 만들었다. 유일한 차이점은 "YDelta"및 "YDelta"값으로 교환되고 업데이트 된 "android : animation"값입니다. 그럼이 코드에서 리소스를로드하고이 같은 @ 아이디/layoutSearch로 설정합니다
LayoutAnimationController controller =
AnimationUtils.loadLayoutAnimation(this, R.anim.search_out_layout);
mSearchLayout.setLayoutAnimation(controller);
은 "밖으로"애니메이션은 setLayoutAnimation의 호출에 트리거(). 애니메이션이 끝나면 "out"애니메이션 전에 있던 화면의 원래 위치로 검색 패널이 돌아갑니다. setLayoutAnimation() 직후에 mSearchLayout.setVisibility (View.GONE)를 호출하려고하면 애니메이션이 표시되지 않고 패널이 한 번에 사라집니다.
시도해보십시오. 3 : 코드에 애니메이션을 작성한 다음 리스너를 설정해야한다고 생각합니다. 그런 다음 애니메이션 재생 후 패널을 숨기려면 onAnimationEnd() 핸들러에서 mSearchLayout.setVisibility (View.GONE)를 호출해야합니다. 나는 아직 이것을 시도하지 않았다. 복잡한 일이라고 생각합니다.
내가 뭔가 중요한 것을 놓친 것 같아. GONE 애니메이션을 약간 쉽게 구현할 수있는 방법이 있습니까?
"아웃"애니메이션 작업을 만드는 더 쉬운 방법은 없습니다. 고맙습니다. – borisstr
애니메이션 끝 부분에서 성가신 플래시없이이 작업을 수행하는 방법을 찾았는지 궁금합니다.보기가 GONE이므로보기가 다시 출력됩니다. – num1
View에 인수를 취하도록 생성자를 추가하는 것은 백만 번 반복 할 필요가없는 좋은 방법입니다. 그런 다음 a.setAnimationListener (new MyAnimationListener (v));로 원하는대로 적용 할 수 있습니다. 단, 각 애니메이션은 단일 뷰에 묶여 있어야합니다. –