Intereting Posts
Проблемы с GridView внутри ScrollView в android Обновления смарт-приложений в Google Play Store: как это работает? AppCompat v7: 21 Разбитая панель действий Разбита? Могу ли я редактировать файлы внутри оболочки Android (оболочка adb) Android: правильный способ прыгать между фрагментами Эмулятор Android 5.0 показывает, что пространство для хранения заканчивается Когда вызывается метод onCreate () приложения? Элементы действия из исходного фрагмента Viewpager не отображаются Изменение формы уведомления Выключение потока с неперехваченным исключением: отсутствие трассировки стека Индексирование Google App не работает над полем описания, но работает над полем заголовка Внутренний класс внутри интерфейса, реализующий тот же интерфейс, что мы достигаем этим? Android SearchView.OnQueryTextListener OnQueryTextSubmit не запускается в пустой строке запроса Сбой при самообновлении APK (класс компонента не существует) Удаление вызова из журнала вызовов после завершения вызова

Измените переход на ввод / выезд DialogFragment как раз перед увольнением

У меня есть DialogFragment, и я установил анимацию для ввода / выхода в методе onActivityCreated, как показано ниже.

@Override public void onActivityCreated(Bundle arg0) { super.onActivityCreated(arg0); getDialog().getWindow() .getAttributes().windowAnimations = R.style.DialogAnimation; } 

Мои файлы стиля DialogAnimation выглядят следующим образом

 <style name="DialogAnimation"> <item name="android:windowEnterAnimation">@android:anim/fade_in</item> <item name="android:windowExitAnimation">@android:anim/fade_out</item> </style> 

Это работает для меня сейчас …

Теперь моя проблема в том, что я хочу иметь две разные анимации выхода, когда нажата кнопка «ОК», и одна для кнопки «Отмена». Так что я сделал, я попытался изменить переход непосредственно перед увольнением, но он не работал. О том, как это может быть достигнуто … Это то, что я пробовал.

  @Override public void onClick(View v) { getDialog().getWindow() .getAttributes().windowAnimations = R.style.DialogAnimation2; this.dismiss(); } 

Solutions Collecting From Web of "Измените переход на ввод / выезд DialogFragment как раз перед увольнением"

Вы можете сделать это внутри своего диалогового окна, не меняя

 getDialog().getWindow() .getAttributes().windowAnimations 

Вы должны оживить «декор» в onStart и onClick.

Это код:

Сначала создать диалог

 @Override public Dialog onCreateDialog(Bundle savedInstanceState) { return new AlertDialog.Builder(getActivity()) .setTitle("Hello from animated dialog :)") .setNegativeButton("Cancel", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { //we have to add button here and then override it's click in onStart } } ) .setCancelable(false) .create(); } 

Затем переопределите метод onStart

 @Override public void onStart() { super.onStart(); AlertDialog dialog = (AlertDialog)getDialog(); final View decorView = getDialog() .getWindow() .getDecorView(); ObjectAnimator scaleDown = ObjectAnimator.ofPropertyValuesHolder(decorView, PropertyValuesHolder.ofFloat("scaleX", 0.0f, 1.0f), PropertyValuesHolder.ofFloat("scaleY", 0.0f, 1.0f), PropertyValuesHolder.ofFloat("alpha", 0.0f, 1.0f)); scaleDown.setDuration(2000); scaleDown.start(); Button positiveButton = dialog.getButton(Dialog.BUTTON_NEGATIVE); positiveButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { final View decorView = getDialog() .getWindow() .getDecorView(); ObjectAnimator scaleDown = ObjectAnimator.ofPropertyValuesHolder(decorView, PropertyValuesHolder.ofFloat("scaleX", 1.0f, 0.0f), PropertyValuesHolder.ofFloat("scaleY", 1.0f, 0.0f), PropertyValuesHolder.ofFloat("alpha", 1.0f, 0.0f)); scaleDown.addListener(new Animator.AnimatorListener() { @Override public void onAnimationEnd(Animator animation) { dismiss(); } @Override public void onAnimationStart(Animator animation) { } @Override public void onAnimationCancel(Animator animation) { } @Override public void onAnimationRepeat(Animator animation) { } }); scaleDown.setDuration(2000); scaleDown.start(); } }); } 

Вот результат анимации

Демонстрация результата


И если вы удалите свойства шкалы из моего кода, вы получите только альфа-анимацию. Именно так, как вы хотели.

Удали это:

 PropertyValuesHolder.ofFloat("scaleX", 1.0f, 0.0f), PropertyValuesHolder.ofFloat("scaleY", 1.0f, 0.0f), 

Вы можете настроить анимацию Up down для фрагмента диалога.

// Слайд анимации

 <?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" > <translate android:duration="@android:integer/config_mediumAnimTime" android:fromYDelta="100%" android:interpolator="@android:anim/accelerate_interpolator" android:toXDelta="0" /> </set> 

// Слайд анимации dowm

 <?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" > <translate android:duration="@android:integer/config_mediumAnimTime" android:fromYDelta="0%p" android:interpolator="@android:anim/accelerate_interpolator" android:toYDelta="100%p" /> </set> 

// Стиль

 <style name="DialogAnimation"> <item name="android:windowEnterAnimation">@anim/slide_up</item> <item name="android:windowExitAnimation">@anim/slide_down</item> </style> 

// Внутренний фрагмент диалога

 @Override public void onActivityCreated(Bundle arg0) { super.onActivityCreated(arg0); getDialog().getWindow() .getAttributes().windowAnimations = R.style.DialogAnimation; } 

Один простой способ сделать то, что вы хотите, это использовать анимационные прослушиватели.

  animation.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) { // TODO Auto-generated method stub // dismiss your dialog in here and it will work } }); 

Начните анимацию по методу onclick и откройте диалог onAnimationEnd (). Вам может потребоваться создание объектов snimm и запустить их вручную с помощью метода startAnimation (анимации) View.

Я думаю, что лучший подход – это назвать разные анимации при нажатии кнопки. Следовательно, у вас будет нечто похожее на нижеследующее:

  protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button OkButton = (Button) findViewById(R.id.btnOk); Button CancelButton = (Button) findViewById(R.id.btnCancel); OkButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { getDialog().getWindow().getAttributes().windowAnimations = R.style.DialogAnimation; } }); return true; CancelButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { getDialog().getWindow().getAttributes().windowAnimations = R.style.DialogAnimation2; } }); return true; } 

Если бы я был вами, я бы также использовал правильные соглашения об именах для дальнейшего использования. Например, установите DialogAnimation на OkAnimation и DialogAnimation2 на CancelAnimation.

Домой это помогает 🙂

Вы должны установить тему для своего базового диалога

Скажем: –

 public class CustomDialogFragment extends DialogFragment implements OnEditorActionListener { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return super.onCreateView(inflater, container, savedInstanceState); } @Override public Dialog onCreateDialog(Bundle savedInstanceState) { // Set a theme on the dialog builder constructor! AlertDialog.Builder builder = new AlertDialog.Builder( getActivity(), R.style.MyCustomTheme ); builder .setTitle( "Your title" ) .setMessage( "Your message" ) .setPositiveButton( "OK" , new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dismiss(); } }); return builder.create(); } } 

Тогда вам просто нужно определить тему, которая будет включать в себя вашу желаемую анимацию. В styles.xml добавьте свою тему:

 <style name="MyCustomTheme" parent="@android:style/Theme.Panel"> <item name="android:windowAnimationStyle">@style/MyAnimation.Window</item> </style> <style name="MyAnimation.Window" parent="@android:style/Animation.Activity"> <item name="android:windowEnterAnimation">@anim/anim_in</item> <item name="android:windowExitAnimation">@anim/anim_out</item> </style> 

Обратитесь к этому