Fab.show () не анимируется в первый раз после инициализации новой активности

Я использую компонент плавающей кнопки действия (fab) из библиотеки com.android.support:design:23.1.0 для создания приложений моего приложения.

Но в первый раз, когда я загружаю новое действие с помощью fab.hide () и пытаюсь сделать значок видимым через fab.show () после нажатия кнопки, анимации для fab нет. Это происходит только в первый раз после загрузки нового действия. Когда я пытаюсь несколько раз скрывать и показывать кнопку, она анимируется должным образом.

В чем проблема? Это было бы очарованием, чтобы оживить его сразу после загрузки активности.

Java в действии:

fabSend = (FloatingActionButton) findViewById(R.id.fabSend); fabSend.hide(); CompoundButton.OnCheckedChangeListener changeChecker = new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if (isChecked){ // FAB on fabSend.show(); } else { // FAB off fabSend.hide(); } } }; 

layout.xml

  <android.support.design.widget.FloatingActionButton android:id="@+id/fabSend" app:borderWidth="0dp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="end" android:layout_alignParentBottom="true" android:layout_marginRight="@dimen/fab_margin" android:layout_marginBottom="54dp" android:src="@drawable/ic_check_white_24dp" /> 

Solutions Collecting From Web of "Fab.show () не анимируется в первый раз после инициализации новой активности"

У меня была та же проблема. В моем XML-файле у меня была visibility="gone" , чем я пытался показать fab из кода fab.show() – и анимация не работала в первый раз. Я изменил xml на visibility="invisible" и проблема была решена.

Решила это наконец. Я разработал новый класс для обработки анимации раскрытия с задержкой. Возьмите его здесь, инициализируйте его, и вам хорошо идти. Я нашел довольно похожую анимацию для стандартного fab.show () с задержкой 50 мс на нем.

  public static void showFabWithAnimation(final FloatingActionButton fab, final int delay) { fab.setVisibility(View.INVISIBLE); fab.setScaleX(0.0F); fab.setScaleY(0.0F); fab.setAlpha(0.0F); fab.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() { @Override public boolean onPreDraw() { fab.getViewTreeObserver().removeOnPreDrawListener(this); fab.postDelayed(new Runnable() { @Override public void run() { fab.show(); } }, delay); return true; } }); } 

Согласно документам:

android.support.design.widget.FloatingActionButton

Public void show ()

Показывает кнопку. Этот метод будет анимировать кнопку, если представление уже выложено .

Поэтому, чтобы сделать его оживляющим в первый раз, вы можете написать свою собственную анимацию, чтобы оживить ее, когда она в настоящее время не выложена

 /** * Unlike {@link FloatingActionButton#show()} animates button even it not currently * laid out * @param fab fab to show */ @SuppressLint("NewApi") public static void show(FloatingActionButton fab) { if (ViewCompat.isLaidOut(fab) || Build.VERSION.SDK_INT < Build.VERSION_CODES.ICE_CREAM_SANDWICH) { fab.show(); } else { fab.animate().cancel();//cancel all animations fab.setScaleX(0f); fab.setScaleY(0f); fab.setAlpha(0f); fab.setVisibility(View.VISIBLE); //values from support lib source code fab.animate().setDuration(200).scaleX(1).scaleY(1).alpha(1) .setInterpolator(new LinearOutSlowInInterpolator()); } }