Ish*_*haq 44 android android-popupwindow
我在我的应用程序中有一个弹出窗口,当点击某个按钮时它出现我想将动画淡入到此窗口,我将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>
Run Code Online (Sandbox Code Playgroud)
===============================================
创建弹出窗口
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;}
}
Run Code Online (Sandbox Code Playgroud)
================================================= onClick method ...(optionsPopup是PopupWindow类型的全局变量)
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.options:
optionsPopup=showOptions(this);
break;
}
Run Code Online (Sandbox Code Playgroud)
And*_*lva 109
我认为问题是你只提供了一套动画风格.但实际上PopupWindow需要两个动画.当显示窗口时将使用一个,而另一个则用于隐藏窗口.
这是你应该怎么做的,
1)创建两组不同的动画.
比方说,popup_show.xml和popup_hide.xml并将其添加到你必须在res文件夹中创建的anim文件夹中.
2)现在inside values文件夹创建一个名为styles.xml的xml ,并像这样添加这些动画,
<style name="Animation">
<item name="android:windowEnterAnimation">@anim/popup_show</item>
<item name="android:windowExitAnimation">@anim/popup_hide</item>
</style>
Run Code Online (Sandbox Code Playgroud)
3)现在将此样式设置为PopupWindow动画,
popup.setAnimationStyle(R.style.Animation);
Run Code Online (Sandbox Code Playgroud)
现在它会自动检测Window Enter和Exit并提供所需的动画.
aim*_*ano 13
我正在使用此代码的弹出动画:
// 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);
Run Code Online (Sandbox Code Playgroud)
位于/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>
Run Code Online (Sandbox Code Playgroud)
Kun*_*ish 10
PopupWindow 自定义布局更方便,显示位置自由没有任何限制。使用下面的代码并享受动画。在此动画中使用底部滑入和滑出,但您只能更改滑入/滑出动画并为应用程序中的任何位置设置动画,并且根据您的动画还有一件事,您必须更改重力 ->> BOTTOM、TOP 等。
动画资源文件夹:
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>
Run Code Online (Sandbox Code Playgroud)
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>
Run Code Online (Sandbox Code Playgroud)
风格:
<style name="popup_window_animation">
<item name="android:windowEnterAnimation">@anim/slide_in_bottom</item>
<item name="android:windowExitAnimation">@anim/slide_out_bottom</item>
</style>
Run Code Online (Sandbox Code Playgroud)
方法:
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;}
}
Run Code Online (Sandbox Code Playgroud)
这可能有点晚,但动画未显示的原因是因为您在设置动画之前显示弹出窗口.
optionspu.showAtLocation(layout, Gravity.TOP, 0, 0);
optionspu.setAnimationStyle(R.anim.myanim);
Run Code Online (Sandbox Code Playgroud)
反转两行,你会看到动画:
optionspu.setAnimationStyle(R.anim.myanim);
optionspu.showAtLocation(layout, Gravity.TOP, 0, 0);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
59397 次 |
| 最近记录: |