最近想把公司的中獎查詢加個小功能,彈出一個自定義的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>
這樣基本就可以用了。