アプリケーションにポップアップウィンドウがあり、ボタンがクリックされたときに表示されます。このウィンドウにフェードインアニメーションを設定します。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;
}
問題は、アニメーションスタイルを1セットしか提供していないことだと思います。しかし、実際にはPopupWindow
には2つのアニメーションが必要です。 1つはウィンドウが表示されるときに使用され、もう1つはウィンドウを非表示にします。
これはあなたがそれをするべき方法です、
1)2つの異なるアニメーションセットを作成します。
たとえば、popup_show.xmlおよびpopup_hide.xmlを追加して、res内に作成する必要があるanimフォルダーに追加します=フォルダー。
2)ここでvaluesフォルダー内にstyles.xmlというxmlを作成し、これらのアニメーションを次のように追加します。
<style name="Animation">
<item name="Android:windowEnterAnimation">@anim/popup_show</item>
<item name="Android:windowExitAnimation">@anim/popup_hide</item>
</style>
3)このスタイルをPopupWindow
アニメーションに設定し、
popup.setAnimationStyle(R.style.Animation);
現在、ウィンドウの出入りを自動的に検出し、必要なアニメーションを提供します。
私はこのコードでポップアップアニメーションを使用しています:
// Creating the PopupWindow
layoutInflater = (LayoutInflater) getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
inflatedLayoutView = layoutInflater.inflate(R.layout.packages_popup,null);
inflatedLayoutView.setAnimation(AnimationUtils.loadAnimation(this, R.animator.popupanim)
popup_l = new PopupWindow(inflatedLayoutView);
popup_l.setWidth(FrameLayout.LayoutParams.WRAP_CONTENT);
popup_l.setHeight(FrameLayout.LayoutParams.WRAP_CONTENT);
popup_l.setFocusable(true);
// Clear the default translucent background
popup_l.setBackgroundDrawable(new BitmapDrawable());
popup_l.showAtLocation(parent, Gravity.CENTER, 0 , 0);
popup_l.setOutsideTouchable(false);
/res/animator/popupanim.xml(popupanim.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="500"
Android:repeatCount="0"/>
</set>
これは少し遅いかもしれませんが、アニメーションが表示されなかった理由は、アニメーションを設定する前にポップアップウィンドウを表示しているためです。
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);
PopupWindowカスタムレイアウトはより便利で、表示位置は自由であり、制限はありません。以下のコードを使用して、アニメーションをお楽しみください。このアニメーションでは、下のスライドインとスライドアウトを使用しますが、スライドイン/アウトアニメーションのみを変更し、アニメーションに応じてアプリ内の任意の場所をアニメーション化できます。
アニメーションリソースフォルダー:
1.slide_in_bottom.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:shareInterpolator="false"
>
<translate
Android:duration="@integer/dialogplus_animation_default_duration"
Android:fromXDelta="0%"
Android:fromYDelta="100%"
Android:toXDelta="0%"
Android:toYDelta="0%"
/>
</set>
2.slide_out_bottom.xml:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:shareInterpolator="false"
>
<translate
Android:duration="@integer/dialogplus_animation_default_duration"
Android:fromXDelta="0%"
Android:fromYDelta="0%"
Android:toXDelta="0%"
Android:toYDelta="100%"
/>
</set>
スタイル:
<style name="popup_window_animation">
<item name="Android:windowEnterAnimation">@anim/slide_in_bottom</item>
<item name="Android:windowExitAnimation">@anim/slide_out_bottom</item>
</style>
方法:
private PopupWindow showOptions(Context mcon){
try{
LayoutInflater inflater = (LayoutInflater) mcon.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
View layout = inflater.inflate(R.layout.popup_option_documents_type,null);
PopupWindow optionspu = new PopupWindow(layout, ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
optionspu.setAnimationStyle(R.style.popup_window_animation);
optionspu.setBackgroundDrawable(new ColorDrawable(Color.WHITE));
optionspu.setFocusable(true);
optionspu.setOutsideTouchable(true);
optionspu.update(0, 0, ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
optionspu.showAtLocation(layout, Gravity.BOTTOM, 0, 0);
return optionspu;
}
catch (Exception e){e.printStackTrace();
return null;}
}