2017-01-26 13 views
0

この質問に似たトピックが存在することは知っていますが、私のコードでこの作業を行う方法はわかりません。アニメーションの終了後にのみpopupWindowを閉じる方法

私はpopupwindowを持っています(これは私が望むことをやり遂げる最善の方法であるかどうかは分かりませんが、AndroidではIm newです)。しかし、私が見つけたアニメーションの画像をクリックするとpopupWindowが現れました。ここで、popupwindowをアニメーション化する方法についての質問を読んだ後、EnterとExitのアニメーションをする必要がある、私はそれを行う方法を理解するが、今私の質問:

私は方法を知っているpopupwindowは、Animationの終了後に終了します。

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); 

は、アニメーションのコードを入力します。

<?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> 

私は入力アニメーションの終了後にポップアップウィンドウを閉じたい、私の目標はpopupappearで、トップにlitleを移動病気の恐れがあります。

答えて

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(); 
関連する問題