showAtLocation()显示在指定位置,有两个方法重载:
/*第一个参数是父容器,第二个参数是在父容器相对位置,第三个参数是X轴偏移量(正数往右,负数往左),第四个参数是Y轴偏移量(正数往下,负数往上) 安卓手机的坐标系也苹果一样都是以屏幕左上点位原点!*/
public void showAtLocation(View parent, int gravity, int x, int y) public void showAtLocation(IBinder token, int gravity, int x, int y)
showAsDropDown()显示在一个参照物View的周围,有三个方法重载:
public void showAsDropDown(View anchor) public void showAsDropDown(View anchor, int xoff, int yoff) public void showAsDropDown(View anchor, int xoff, int yoff, int gravity)
在给popuwindow设置动画时,一定要现设动画后显示popuwindow否则动可能不出。先调用了 showAsDropDown()方法,再设置其他属性,导致了这种情况.!
showAsDropDown这个方法相当于 Dialog.show()方法, 如果是先show了, 然后其他属性即使是设置了,也起不到应有的作用.
eg:
1> 首先定义好,显示和消失的动画xml;
<!-- 显示动画-->
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<scale android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:fromXScale="0.0"
android:toXScale="1.0"
android:fromYScale="0.0"
android:toYScale="1.0"
android:pivotX="50%"
android:pivotY="50%"
android:fillAfter="false"
android:duration="200" >
</scale>
</set>
<!-- 消失动画-->
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 透明度渐变-->
<alpha android:fromAlpha="1.0" android:toAlpha="0.0" android:duration="200" />
</set>
2> popupwindow 的显示和消失动画,是通过setAnimationStyle(int id) 的方法,来设置动画的。 这个方法的参数是,一个style 的id ;
所以需要一个 动画style;
<!-- popwidnow 显示消失 动画-->
<style name="mypopwindow_anim_style">
<item name="android:windowEnterAnimation">@anim/popshow_anim</item><!-- 指定显示的动画xml -->
<item name="android:windowExitAnimation">@anim/pophidden_anim</item> <!-- 指定消失的动画xml-->
</style>
3> 在代码中,添加popupwindow 动画;
PopupWindow myimgpopupwindow = new PopupWindow( View (要显示的view对象), LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);
myimgpopupwindow.setAnimationStyle(R.style.mypopwindow_anim_style); //设置动画
myimgpopupwindow.showAtLocation( View( 参照的view对象), Gravity.CENTER, 0, 0); //居中来显示