0

Я знаю, что существует тема, подобная этому Вопросу, но я не могу понять, как сделать эту работу с моим кодом.Как только убрать popupWindow после окончания анимации

У меня есть одно popupwindow (я даже не знаю, действительно ли это лучший способ сделать то, что я хочу, но Im new на Android), но я сделал popupWindow, появляющийся при щелчке изображения с анимацией, которую я нашел здесь, после того, как я прочитал вопрос о том, как оживить popupwindow и что у меня есть ожидание анимации Enter и Exit, я думаю, как это сделать, но теперь мой вопрос:

Я не знаю, как это сделать popupwindow увольтется после завершения Enter Animatio.

код

popupWindow:

LayoutInflater inflater = (LayoutInflater) getBaseContext().getSystemService(LAYOUT_INFLATER_SERVICE); 
View viewAnimationResourceEarned = inflater.inflate(R.layout.layout_animation_resources_earned, null); 

animationResourceEarned = new PopupWindow(viewAnimationResourceEarned, LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 
animationResourceEarned.setAnimationStyle(R.style.styleAnimationResourceEarned); 
animationResourceEarned.showAtLocation(viewAnimationResourceEarned, Gravity.CENTER, 0, 0); 

Введите Animation код:

<?xml version="1.0" encoding="utf-8"?> 
<set xmlns:android="http://schemas.android.com/apk/res/android" 
    android:ordering="sequentially"> 

    <scale xmlns:android="http://schemas.android.com/apk/res/android" 
     android:toXScale="1.0" 
     android:fromXScale="0.0" 

     android:toYScale="1.0" 
     android:fromYScale="0.0" 

     android:pivotX="0%" 
     android:pivotY="50%" 

     android:startOffset="100" 
     android:duration="300" /> 

    <translate 
     android:fromYDelta="0" 
     android:toYDelta="-50" 
     android:duration="2500"/> 
</set> 

Я хочу, чтобы закрыть всплывающее окно, после Enter анимации конца, Моя цель является popupappear, двигаться к вершине Лил и diseppear

ответ

0

Вы можете использовать прослушиватель анимации.

Вы должны определить анимацию в переменной анимации, как этот

Animation animation = AnimationUtils.loadAnimation(this, R.style.styleAnimationResourceEarned); 

А потом,

animation.setAnimationListener(new Animation.AnimationListener() { 

@Override public void onAnimationStart(Animation animation) { 

} 

@Override public void onAnimationEnd(Animation animation) { 
//Dismiss it 
} 

@Override public void onAnimationRepeat(Animation animation) { 

} }); 
+0

Я поставил "Анимация анимации = новая анимация (0, R.style.styleAnimationResourceEarned);" на моем коде, но что анимация является абстрактной; не может быть создан – BrunoM24

+0

Я ошибся. Я отредактировал свой ответ. Пожалуйста, проверьте сейчас. –

+0

не работает, потому что «styleAnimationResourceEarned» не является анимацией типа ресурса, я пытаюсь загрузить анимацию ввода, но вызывать в popupWindow мне нужно установить стиль анимации, чтобы слушатель не обнаружил анимацию – BrunoM24

0

Бруно,

Столкнувшись один и тот же вопрос. К сожалению, в настоящее время нет способа получить обратный вызов для анимации, используемой в popupwindow. Я сделал небольшое обходное решение, используя countdowntimer. Не совершенен - ​​но работает хорошо. Надеюсь, поможет.

popupWindow.setOnDismissListener(new PopupWindow.OnDismissListener() { 
     @Override 
     public void onDismiss() { 
      new CountDownTimer(animationDuration, 10) { 
       public void onTick(long millisUntilFinished) { 
       } 
       public void onFinish() { 
        toggle(); 
       } 
      }.start(); 
     } 
    }); 

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

int[] attrs = {android.R.attr.windowExitAnimation}; 
    TypedArray ta = context.obtainStyledAttributes(R.style.PopUpMenuAnimation, attrs); 
    int resID = ta.getResourceId(0,0); 
    Animation anim = AnimationUtils.loadAnimation(context, resID); 
    final long animationDuration = anim.getDuration();