2014-10-10 4 views
1

У меня есть деятельность, и его расположение contentView как это:Почему анимация перевода не работает?

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/schedule_item_list" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical" > 

<ListView 
    android:id="@+id/item_list" 
    android:layout_width="match_parent" 
    android:layout_height="0dp" 
    android:layout_weight="1" /> 

<LinearLayout 
    android:id="@+id/bottom_menu" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="vertical" 
    android:visibility="gone" > 
<!-- some buttons --> 
</LinearLayout> 

</LinearLayout> 

Я хочу, чтобы показать и скрыть нижнюю LinearLayout так, чтобы сделать его действовать как нижней части меню, создать такую ​​функцию:

private void showBottomMenuView() 
{ 
    if (mBottomMenuView.getVisibility() != View.VISIBLE) { 
     Animation slideinAnimation = new TranslateAnimation(0.0f, 0.0f, 1.0f, 0.0f); 
     slideinAnimation.setDuration(300); 
     mBottomMenuView.startAnimation(slideinAnimation); 
     mBottomMenuView.setVisibility(View.VISIBLE); 
    } 
} 

однако он не работает, когда я хочу показать нижнюю компоновку (mBottomMenuView). вид не будет скользить снизу плавно, он просто появляется внезапно

Но когда я загружаю анимацию из xml, это действительно сработало.

<set xmlns:android="http://schemas.android.com/apk/res/android"> 
<translate 
    android:fromYDelta="100%" 
    android:toYDelta="0%" 
    android:duration="300"/> 
</set> 


private void showBottomMenuView() 
{ 
    if (mBottomMenuView.getVisibility() != View.VISIBLE) { 
     Animation slideinAnimation = AnimationUtils.loadAnimation(getActivity(), R.anim.slide_in); 
     mBottomMenuView.startAnimation(slideinAnimation); 
     mBottomMenuView.setVisibility(View.VISIBLE); 
    } 
} 

Почему предыдущая новая анимация не сработала?

ответ

3

Ваши хочет измерить вашу высоту экрана используйте

Animation slideinAnimation = new TranslateAnimation(0.0f, 0.0f, mesureHeight, 0.0f); 

или

Animation slideinAnimation = new TranslateAnimation(Animation.RELATIVE_TO_PARENT,0.0f, 
    Animation.RELATIVE_TO_PARENT, 0.0f, 
    Animation.RELATIVE_TO_PARENT, 1.0f, 
    Animation.RELATIVE_TO_PARENT, 0.0f); 
+0

Спасибо за ваш ответ, я посмотрел на источник и нашел четыре параметров TranslateAnimation конструктор установки от и до введите значение ABSLOUTE по умолчанию – tinaJohnny

Смежные вопросы