定义动画
anim/dialog_ios_scale_in
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="200">
<scale
android:fromXScale="1.2"
android:fromYScale="1.2"
android:interpolator="@android:anim/decelerate_interpolator"
android:pivotX="50%"
android:pivotY="50%"
android:toXScale="1.0"
android:toYScale="1.0" />
<alpha
android:fromAlpha="0.0"
android:interpolator="@android:anim/decelerate_interpolator"
android:toAlpha="1.0" />
</set>
anim/dialog_ios_scale_out
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="200">
<scale
android:fromXScale="1.0"
android:fromYScale="1.0"
android:interpolator="@android:anim/accelerate_interpolator"
android:pivotX="50%"
android:pivotY="50%"
android:toXScale="1.2"
android:toYScale="1.2" />
<alpha
android:fromAlpha="0.5"
android:interpolator="@android:anim/accelerate_interpolator"
android:toAlpha="0.0" />
</set>
定义样式:
\src\main\res\values\styles.xml
<style name="MyDialogStyle">
<!--设置dialog的背景-->
<item name="android:windowBackground">@android:color/transparent</item>
<!--设置Dialog的windowFrame框为无-->
<item name="android:windowFrame">@null</item>
<!--设置无标题-->
<item name="android:windowNoTitle">true</item>
<!--是否浮现在activity之上-->
<item name="android:windowIsFloating">true</item>
<!--是否半透明-->
<item name="android:windowIsTranslucent">true</item>
<!--设置窗口内容不覆盖-->
<item name="android:windowContentOverlay">@null</item>
<!--设置动画-->
<item name="android:windowAnimationStyle">@style/DialogIOSAnimation</item>
<!--背景是否模糊显示-->
<item name="android:backgroundDimEnabled">true</item>
<!--设置窗体外面允不允许点击-->
<item name="android:windowCloseOnTouchOutside">true</item>
<!--设置窗体是否全屏-->
<item name="android:windowFullscreen">true</item>
</style>
<!--自定义动画-->
<style name="DialogIOSAnimation" parent="@android:style/Animation.Dialog">
<item name="android:windowEnterAnimation">@anim/dialog_ios_scale_in</item>
<item name="android:windowExitAnimation">@anim/dialog_ios_scale_out</item>
</style>
引入样式:
\src\main\AndroidManifest.xml
<activity
android:name=".MyDialogActivity"
android:screenOrientation="portrait"
android:theme="@style/MyDialogStyle" />
使用弹框Activity
MyDialogActivity的使用和正常activity一样。唯一的区别就是根布局的宽高要写具体数值才有效。
当然我们也可以在代码中动态设置。
布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="200dp"
android:layout_height="200dp"
android:background="@color/yellow"
android:maxHeight="300dp"
android:maxWidth="300dp"
android:orientation="vertical">
<Button
android:id="@+id/btn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="关闭dialog" />
<ImageView
android:id="@+id/iv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_margin="20dp"
android:src="@drawable/ic_launcher" />
</LinearLayout>
代码:
public class MyDialogActivity extends FragmentActivity {
private ImageView iv;
private Button btn;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.dialog_layout);
/*设置dialog全屏方式一*/
// WindowManager.LayoutParams lp = getWindow().getAttributes();
// lp.width = WindowManager.LayoutParams.MATCH_PARENT;
// lp.height = WindowManager.LayoutParams.MATCH_PARENT;
// getWindow().setAttributes(lp);
// /*设置dialog全屏方式二*/
// DisplayMetrics dm = new DisplayMetrics();
// getWindowManager().getDefaultDisplay().getMetrics(dm);
// WindowManager.LayoutParams lp = getWindow().getAttributes();
// lp.width = dm.widthPixels;
// lp.height = dm.heightPixels;
// getWindow().setAttributes(lp);
/*设置dialog宽高位置等*/
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
WindowManager.LayoutParams lp = getWindow().getAttributes();
lp.width = dm.widthPixels * 9 / 10;
lp.height = dm.widthPixels * 9 / 10;
lp.gravity = Gravity.BOTTOM;
getWindow().setAttributes(lp);
btn = ((Button) this.findViewById(R.id.btn));
iv = ((ImageView) this.findViewById(R.id.iv));
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
}
}