阴影背景 bg_shadow_white.xml
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Drop Shadow Stack -->
<!--<item>-->
<!--<shape>-->
<!--<corners android:radius="10dp"/>-->
<!--<padding-->
<!--android:bottom="2dp"-->
<!--android:left="2dp"-->
<!--android:right="2dp"-->
<!--android:top="2dp" />-->
<!--<solid android:color="#10cccccc" />-->
<!--</shape>-->
<!--</item>-->
<!--<item>-->
<!--<shape>-->
<!--<corners android:radius="10dp"/>-->
<!--<padding-->
<!--android:bottom="2dp"-->
<!--android:left="2dp"-->
<!--android:right="2dp"-->
<!--android:top="2dp" />-->
<!--<solid android:color="#20CCCCCC" />-->
<!--</shape>-->
<!--</item>-->
<item>
<shape>
<corners android:radius="5dp"/>
<padding
android:bottom="1dp"
android:left="1dp"
android:right="1dp"
android:top="1dp" />
<solid android:color="#40CCCCCC" />
</shape>
</item>
<item>
<shape>
<corners android:radius="5dp"/>
<padding
android:bottom="1dp"
android:left="1dp"
android:right="1dp"
android:top="1dp" />
<solid android:color="#50CCCCCC" />
</shape>
</item>
<item>
<shape>
<corners android:radius="5dp"/>
<padding
android:bottom="1dp"
android:left="1dp"
android:right="1dp"
android:top="1dp" />
<solid android:color="#60CCCCCC" />
</shape>
</item>
<!-- Background -->
<item>
<shape>
<corners android:radius="5dp"/>
<solid android:color="#FFFFFF" />
</shape>
</item>
</layer-list>
入动画 pop_enter_anim.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<alpha
android:duration="200"
android:fromAlpha="0"
android:toAlpha="1.0"/>
<scale
android:duration="200"
android:interpolator="@android:anim/accelerate_interpolator"
android:pivotX="85%"
android:pivotY="0%"
android:fromXScale="0"
android:fromYScale="0"
android:toXScale="1"
android:toYScale="1"/>
</set>
出动画 pop_exit_anim.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<alpha
android:duration="200"
android:fromAlpha="1.0"
android:toAlpha="0.0"/>
<scale
android:duration="200"
android:fromXScale="1.0"
android:fromYScale="1.0"
android:interpolator="@android:anim/accelerate_interpolator"
android:pivotX="85%"
android:pivotY="0%"
android:toXScale="0"
android:toYScale="0"/>
</set>
动画 样式
<style name="popwin_anim_style" parent="android:Animation">
<item name="android:windowEnterAnimation">@anim/pop_enter_anim</item>
<item name="android:windowExitAnimation">@anim/pop_exit_anim</item>
</style>
点击显示、隐藏
final PopupWindow popupWindow=new PopupWindow(LinearLayout.LayoutParams.WRAP_CONTENT,LinearLayout.LayoutParams.WRAP_CONTENT);
popupWindow.setOutsideTouchable(true);
popupWindow.setFocusable(true);
popupWindow.setTouchable(true);
popupWindow.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));//部分系统如果不设置透明背景时无法点击外部隐藏
popupWindow.setAnimationStyle(R.style.popwin_anim_style);
View view =LayoutInflater.from(context).inflate(R.layout.pop_menu_item,null,false);
popupWindow.setContentView(view);
int[] location=new int[2];
iv.getLocationInWindow(location);//iv 为所在屏幕位置
int x=location[0]-(MainActivity.metrics.widthPixels/2)+dp2px(context,22f);//x 偏移量根据自己需求调节
int y= location[1]+dp2px(context,25f);//y 偏移量根据自己需求调节
popupWindow.showAtLocation(iv, Gravity.NO_GRAVITY, x, y);