Страницы

Поиск по вопросам

вторник, 17 декабря 2019 г.

Анимация появления фрагмента

#android #android_fragment #анимация #android_animation


Я хочу анимировать появление фрагмента. При чем чтобы он появлялся "сверху вниз".
 Мне частично удалось реализовать задумку, но проблема в том что сначала появляется
место на экране под фрагмент, а только потом появляется сам фрагмент с анимацией. Как
сделать одновременную анимацию появления места на экране и анимацию появления фрагмента? 

Вот что имею:





Экран разметки




    

    
    

    




Методы, запускающие анимацию

private void calendarShow() {
    FragmentTransaction t = getSupportFragmentManager().beginTransaction();
    t.setCustomAnimations(R.animator.calendar_show, R.animator.calendar_hide);
    t.replace(R.id.calendarView, mCalendar, CALENDAR_TAG);
    t.show(mCalendar);
    t.commit();
    mCalendar.refreshView();
}

private void calendarHide() {
    android.support.v4.app.FragmentTransaction t = getSupportFragmentManager().beginTransaction();
    t.setCustomAnimations(R.animator.calendar_show, R.animator.calendar_hide);
    t.hide(getSupportFragmentManager().findFragmentByTag(CALENDAR_TAG));
    t.commit();
}


Анимации появления и исчезновения

calendar_show.xml




    




calendar_hide.xml




    



    


Ответы

Ответ 1



Попробуйте добавить AnimationListener для управления видимостью фрагмента: private void calendarShow() { FragmentTransaction t = getSupportFragmentManager().beginTransaction(); Animation anim = AnimationUtils.loadAnimation(this, R.animator.calendar_show); anim.setAnimationListener(new Animation.AnimationListener() { @Override public void onAnimationStart(Animation animation) { } @Override public void onAnimationRepeat(Animation animation) { } @Override public void onAnimationEnd(Animation animation) { //Сделайте фрагмент видимым - setVisibility(VISIBLE); } }); t.startAnimation(anim); t.replace(R.id.calendarView, mCalendar, CALENDAR_TAG); t.show(mCalendar); t.commit(); //Сделайте фрагмент невидимым - setVisibility(GONE); mCalendar.refreshView(); }

Комментариев нет:

Отправить комментарий