先上效果图

res文件夹下建一个anim文件夹,然后anim文件夹下建这俩xml:dialog_in.xml和dialog_out.xml
dialog_in.xml
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" android:fillAfter="true" android:fillEnabled="true" android:shareInterpolator="true" android:interpolator="@android:anim/accelerate_interpolator"> <!--anim/accelerate_interpolator加速度变化--> <!--android:interpolator="@android:anim/accelerate_interpolator"插值器必须在set的节点里设--> <!--大小变化--> <scale android:fromXScale="1.0" android:toXScale="1.0" android:fromYScale="0.0" android:toYScale="1.0" android:pivotX="0%" android:pivotY="100%" android:duration="1000"/> </set>dialog_out.xml
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" android:fillAfter="true" android:fillEnabled="true" android:shareInterpolator="true" android:interpolator="@android:anim/bounce_interpolator"> <!--@android:anim/bounce_interpolator回弹效果--> <!--fillBefore是指动画结束时画面停留在第一帧,fillAfter是指动画结束是画面停留在最后一帧。--> <!--最关键的问题是这2个参数不能在</alpha>,</scale>,</translate>,</rotate>中设置,这是没有用的,必须--> <!--在动画xml文件的</set>节点中设置--> <!--大小变化--> <scale android:duration="1000" android:fromXScale="1.0" android:fromYScale="1.0" android:pivotX="0%" android:pivotY="100%" android:toXScale="1.0" android:toYScale="0.0" /> </set>
value文件夹下styles.xml里面加上俩:
<!--dialog的背景属性--> <style name="MyReasonDialog" parent="android:style/Theme.Dialog"> <!--背景颜色及和透明程度--> <item name="android:windowBackground">@color/bantouming</item> <!--是否去除标题 --> <item name="android:windowNoTitle">true</item> <!--是否去除边框--> <item name="android:windowFrame">@null</item> <!--是否浮现在activity之上--> <item name="android:windowIsFloating">true</item> <!--是否模糊--> <item name="android:backgroundDimEnabled">true</item> <item name="android:windowContentOverlay">@null</item> </style> <!--动画的style--> <style name="MyReasonDialogAnim" parent="android:Animation" mce_bogus="1"> <item name="android:windowEnterAnimation">@anim/dialog_in</item> <item name="android:windowExitAnimation">@anim/dialog_out</item> </style>color里面加上一个半透明背景色:
<color name="bantouming">#0ef8fdf8</color>
接下来就是dialog的布局:my_dialog.xml
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <LinearLayout android:layout_width="260dp" android:layout_height="200dp" android:gravity="center_horizontal" android:orientation="vertical" android:padding="10dp" android:layout_centerVertical="true" android:layout_centerHorizontal="true" android:background="@android:color/white" > <LinearLayout android:layout_width="match_parent" android:layout_height="30dp" android:orientation="horizontal"> <TextView android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:text="点击右边小图标退出" android:gravity="center_vertical"/> <ImageView android:id="@+id/exit_img" android:layout_width="30dp" android:layout_height="match_parent" android:src="@mipmap/ic_launcher"/> </LinearLayout> <ImageView android:layout_width="match_parent" android:layout_height="100dp" android:src="@mipmap/ic_launcher"/> <Button android:id="@+id/queding_btn" android:layout_width="match_parent" android:layout_height="35dp" android:text="确定"/> </LinearLayout> </RelativeLayout>
再就是重写dialog类:MyDialog.class/** * 自定义对话框 */ public class MyDialog extends Dialog { private Button quedingBtn; //确定按钮 private ImageView exitImg; //退出按钮 //接口的实例 private OnQudingListener qudingListener; //确定监听实例 private OnExitListener onExitListener; //退出监听实例 Context context; public MyDialog(Context context) { //关联style super(context, R.style.MyReasonDialog); Window window = getWindow(); //设置动画效果 window.setWindowAnimations(R.style.MyReasonDialogAnim); this.context = context; } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //关联布局样式 setContentView(R.layout.my_dialog); //按空白处不能取消动画 setCanceledOnTouchOutside(false); setCancelable(false); //初始化界面控件 initView(); //初始化界面数据 initEvent(); } /** * 初始化界面控件的显示数据 */ private void initEvent() { quedingBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { qudingListener.qudingclick(); } }); exitImg.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { onExitListener.exitclick(); } }); } /** * 确定实例赋值 */ public void setquedingclickListener(OnQudingListener onQudingListener) { qudingListener = onQudingListener; } /** * 退出实例赋值 */ public void setexitListener(OnExitListener onExitListener) { this.onExitListener = onExitListener; } /** * 初始化界面控件 */ private void initView() { exitImg = (ImageView) findViewById(R.id.exit_img); quedingBtn = (Button) findViewById(R.id.queding_btn); } /** * 确定钮接口 */ public interface OnQudingListener { void qudingclick(); } /** * 退出钮接口 */ public interface OnExitListener { void exitclick(); } }
使用方法MainActivity中:final MyDialog myDialog=new MyDialog(MainActivity.this); myDialog.setquedingclickListener(new MyDialog.OnQudingListener() { @Override public void qudingclick() { Toast.makeText(MainActivity.this,"我最帅~~~",Toast.LENGTH_SHORT).show(); myDialog.dismiss(); } }); myDialog.setexitListener(new MyDialog.OnExitListener() { @Override public void exitclick() { myDialog.dismiss(); } }); myDialog.show(); } });大功告成!!!
版权声明:本文为chen_jiang原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。