52

アプリケーションにポップアップ ウィンドウがあり、ボタンをクリックすると表示されます。このウィンドウにフェードイン アニメーションを設定したいのですが、xml ファイルを「res/anim」フォルダに置き、ポップアップ ウィンドウのアニメーション スタイルを設定しますが、アニメーションは動作しません?ここに私のコードがあります:

myanim.xml...

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <alpha android:fromAlpha="0.0"
        android:toAlpha="1.0" 
        android:interpolator="@android:anim/accelerate_interpolator" 
        android:duration="4000"
        android:repeatCount="1"/>
</set>

===============================================

ポップアップ ウィンドウを作成する

private PopupWindow showOptions(Context mcon){
    try{ 
        LayoutInflater inflater = (LayoutInflater) mcon.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
        View layout = inflater.inflate(R.layout.options_layout,null);
        layout.setAnimation(AnimationUtils.loadAnimation(this, R.anim.myanim));
        PopupWindow optionspu = new PopupWindow(layout, LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);

        optionspu.setFocusable(true);
        optionspu.showAtLocation(layout, Gravity.TOP, 0, 0);
        optionspu.update(0, 0, LayoutParams.WRAP_CONTENT, (int)(hei/5));
        optionspu.setAnimationStyle(R.anim.myanim);
        return optionspu;
    }
    catch (Exception e){e.printStackTrace();
    return null;}
}

================================================ onClickメソッド... (optionsPopup は PopupWindow 型のグローバル変数です)

 @Override
public void onClick(View v) {
               switch (v.getId()) { 
        case R.id.options:
                optionsPopup=showOptions(this);
            break;  
}
4

4 に答える 4

119

問題は、アニメーション スタイルを 1 セットしか提供していないことだと思います。しかし、実際にPopupWindowは 2 つのアニメーションが必要です。1つはウィンドウが表示されているときに使用され、もう1つはウィンドウを非表示にするために使用されます。

こうすればいいのに、

1) 2 つの異なるアニメーション セットを作成します。

たとえば、popup_show.xmlpopup_hide.xmlを作成して、 resフォルダー内に作成する必要があるanimフォルダーに追加します。

2)フォルダー内に、 styles.xmlという名前の xml を作成し、これらのアニメーションを次のように追加します。

<style name="Animation">
    <item name="android:windowEnterAnimation">@anim/popup_show</item>
    <item name="android:windowExitAnimation">@anim/popup_hide</item>
</style>

PopupWindow3) このスタイルをアニメーションに設定します。

 popup.setAnimationStyle(R.style.Animation);

ウィンドウの出入りを自動的に検出し、必要なアニメーションを提供するようになりました。

于 2012-09-15T11:07:53.513 に答える
6

これは少し遅いかもしれませんが、アニメーションが表示されなかった理由は、アニメーションを設定する前に popupwindow を表示していたためです。

optionspu.showAtLocation(layout, Gravity.TOP, 0, 0);
optionspu.setAnimationStyle(R.anim.myanim);

2 つの行を逆にすると、アニメーションが表示されます。

optionspu.setAnimationStyle(R.anim.myanim);
optionspu.showAtLocation(layout, Gravity.TOP, 0, 0);
于 2015-09-21T08:36:02.937 に答える