最近想把公司的中奖查询加个小功能,弹出一个自定义的Dialog,还有声音,本来想加个烟花特效,没做出来。QAQ
大概就是这样子,布局很简单,让UI做个透明的背景图,就OK
1:定义一个类继承DialogFragment(看个人需求)
public class AttachDialogFragment extends DialogFragment{ public Activity mContext; @Override public void onAttach(Activity activity) { super.onAttach(activity); this.mContext = activity; } }
2:简单使用
/** * Author:白树 on 2018/8/30 14:07 * <p> 用户 lose * Email: gusumobai@163.com */ public class CustomLoseDialog extends AttachDialogFragment implements View.OnClickListener{ private ImageView mImg_close; private final Handler mHandler = new Handler(); private MediaPlayer mediaPlayer; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setStyle(DialogFragment.STYLE_NO_FRAME,R.style.MyMiddleDialogStyle); } @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) { getDialog().requestWindowFeature(Window.FEATURE_NO_TITLE); //无标题 // getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); View view = inflater.inflate(R.layout.lose_custome_dialog,container); mImg_close = view.findViewById(R.id.not_winning_close); mImg_close.setOnClickListener(this); playSound(); return view; } private void playSound(){ try { mediaPlayer = MediaPlayer.create(mContext,R.raw.losesound); mediaPlayer.start(); }catch (Exception e){ e.printStackTrace(); } } @Override public void onStart() { super.onStart(); int dialogHeight = (int) (mContext.getResources().getDisplayMetrics().heightPixels * 0.8); getDialog().getWindow().setLayout(WindowManager.LayoutParams.MATCH_PARENT,dialogHeight); getDialog().setCanceledOnTouchOutside(true); //点击边际可消失 //6秒后让dialog消失 if (mHandler != null){ mHandler.postDelayed(new Runnable() { @Override public void run() { dismiss(); mediaPlayer.stop(); mediaPlayer.release(); } },6000); } } @Override public void onClick(View v) { switch (v.getId()){ case R.id.not_winning_close: dismiss(); break; } } }
3:使用方式
private void loseDialog(){ CustomLoseDialog customLoseDialog = new CustomLoseDialog(); customLoseDialog.show(getFragmentManager(),"lose"); }
4:
在需要调用的地方,直接调用方法。
5:
<style name="MyMiddleDialogStyle" parent="@android:style/Theme.Holo.Light.Dialog"> <!-- 窗口背景色 --> <item name="android:windowBackground">@android:color/transparent</item> <!--是否有覆盖--> <item name="android:windowContentOverlay">@null</item> <!-- 浮于Activity之上 --> <item name="android:windowIsFloating">true</item> <!-- 边框 --> <item name="android:windowFrame">@null</item> <!-- Dialog以外的区域模糊效果 --> <item name="android:backgroundDimEnabled">true</item> <!-- 无标题 --> <item name="android:windowNoTitle">true</item> <!-- 半透明 --> <item name="android:windowIsTranslucent">true</item> <!--进出动画--> <item name="android:windowAnimationStyle">@android:style/Animation.Translucent</item> </style>
这样基本就可以用了。