This commit is contained in:
fengjignqi
2026-05-16 16:19:39 +08:00
commit 1b1575eb8a
1632 changed files with 242221 additions and 0 deletions

View File

@@ -0,0 +1,109 @@
package com.ckkj.water.dialog;
import android.app.Activity;
import android.app.Dialog;
import android.content.Context;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.ImageView;
import android.widget.TextView;
import com.ckkj.water.R;
/**
* @author messi.mo
* @date 2017/11/22
* 底部选择框
*/
public class A_custom_base_Dialog {
public static View layoutView;
private Dialog mDialog;
private Context mContext;
private TextView tvOneMonth,tvThreeMonth,tvSixMonth,tvStartTime,tvEndTime,tvClear,tvConfirm;
private ImageView imgClose,imgClear;
private String startTime = "";
private String endTime = "";
private DialogListener mListener;
private Animation animUp;
private Animation animDown;
public void setOnDialogListener(DialogListener listener){
this.mListener = listener;
}
public interface DialogListener{
void callBackDatas(String startTime,String endTime);
}
public A_custom_base_Dialog(Activity context, int layoutId) {
this.mContext = context;
mDialog = new Dialog(context, R.style.ActionSheetDialogStyle);
//填充对话框的布局
layoutView = LayoutInflater.from(context).inflate(layoutId, null);
//将布局设置给Dialog
mDialog.setContentView(layoutView);
// 为弹出和关闭设置动画
animUp = AnimationUtils.loadAnimation(mContext, R.anim.popup_anim_up);
animDown = AnimationUtils.loadAnimation(mContext, R.anim.popup_anim_down);
try {
//设置滑出动画
layoutView.startAnimation(animUp);
} catch (Exception e) {
e.printStackTrace();
}
//获取当前Activity所在的窗体
Window dialogWindow = mDialog.getWindow();
mDialog.setCanceledOnTouchOutside(true);
//设置Dialog从窗体底部弹出
if (dialogWindow != null) {
dialogWindow.setGravity(Gravity.BOTTOM);
//获得窗体的属性
WindowManager.LayoutParams lp = dialogWindow.getAttributes();
lp.width = context.getWindowManager().getDefaultDisplay().getWidth();
//设置Dialog距离底部的距离
//lp.y = 30;
// 将属性设置给窗体
dialogWindow.setAttributes(lp);
}
imgClose = layoutView.findViewById(R.id.img_close);
imgClose.setOnClickListener(onclick);
}
View.OnClickListener onclick = new View.OnClickListener() {
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.img_close:
mDialog.dismiss();
break;
}
}
};
public void show() {
if(mDialog != null){
mDialog.show();
}
}
public void dismiss() {
if(mDialog != null){
mDialog.dismiss();
}
}
}

View File

@@ -0,0 +1,95 @@
package com.ckkj.water.dialog;
import android.annotation.SuppressLint;
import android.app.Dialog;
import android.content.Context;
import android.os.Bundle;
import android.os.Handler;
import android.view.Gravity;
import android.view.WindowManager;
import android.widget.ImageView;
import android.widget.TextView;
import com.ckkj.water.R;
import java.util.Objects;
/**
* 居中提示弹窗
*/
public class CenterTipDialog extends Dialog {
private int imageRes = 0;
private String title = "";
private ImageView imageView;
private TextView textView;
private Handler handler = new Handler();
private Runnable dismissRunnable;
public CenterTipDialog(Context context) {
super(context);
}
public CenterTipDialog(Context context, int imageRes, String title) {
super(context);
this.imageRes = imageRes;
this.title = title;
}
public CenterTipDialog(Context context, int theme, int imageRes, String title) {
super(context, theme);
this.imageRes = imageRes;
this.title = title;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
init();
}
@SuppressLint("ResourceAsColor")
private void init() {
getWindow().setBackgroundDrawableResource(R.color.translucent_black_95);
getWindow().setDimAmount(0.5f);
getWindow().setGravity(Gravity.CENTER);
setCancelable(true);
setCanceledOnTouchOutside(true);
setContentView(R.layout.center_tip_dialog);
imageView = findViewById(R.id.image);
textView = findViewById(R.id.tv_title);
if (imageRes != 0) {
imageView.setImageResource(imageRes);
}
textView.setText(title);
WindowManager.LayoutParams params = Objects.requireNonNull(getWindow()).getAttributes();
params.width = WindowManager.LayoutParams.MATCH_PARENT;
params.height = WindowManager.LayoutParams.MATCH_PARENT;
getWindow().setAttributes(params);
}
@Override
public void show() {
super.show();
if (dismissRunnable != null) {
handler.postDelayed(dismissRunnable, 800);
}
}
public void setDismissDelay(long delayMillis, Runnable onDismiss) {
this.dismissRunnable = new Runnable() {
@Override
public void run() {
if (isShowing()) {
dismiss();
}
if (onDismiss != null) {
onDismiss.run();
}
}
};
}
}

View File

@@ -0,0 +1,201 @@
package com.ckkj.water.dialog;
import android.app.Activity;
import android.app.Dialog;
import android.content.Context;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.ImageView;
import android.widget.RadioButton;
import android.widget.TextView;
import androidx.annotation.Nullable;
import androidx.recyclerview.widget.RecyclerView;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.BaseViewHolder;
import com.ckkj.water.R;
import com.ckkj.water.mine.entity.ReportEntity;
import com.ckkj.water.utils.show.ToastUtil;
import java.util.ArrayList;
import java.util.List;
/**
* @author messi.mo
* @date 2017/11/22
* 底部选择框
*/
public class ContentReportDialog {
public static View layoutView;
private Dialog mDialog;
private Context mContext;
private TextView tvCommit,tvThreeMonth,tvSixMonth,tvStartTime,tvEndTime,tvClear,tvConfirm;
private ImageView imgClose,imgClear;
private String startTime = "";
private String endTime = "";
private DialogListener mListener;
private Animation animUp;
private Animation animDown;
//////////////////////////////////////////////
private RecyclerView rvDatas;
private String mReason;
private List<ReportEntity> reportList = new ArrayList<>();
public void setOnDialogListener(DialogListener listener){
this.mListener = listener;
}
public interface DialogListener{
void callBackDatas(String reason);
}
public ContentReportDialog(Activity context, int layoutId, String reason) {
this.mContext = context;
this.mReason = reason;
mDialog = new Dialog(context, R.style.ActionSheetDialogStyle);
//填充对话框的布局
layoutView = LayoutInflater.from(context).inflate(layoutId, null);
//将布局设置给Dialog
mDialog.setContentView(layoutView);
// 为弹出和关闭设置动画
animUp = AnimationUtils.loadAnimation(mContext, R.anim.popup_anim_up);
animDown = AnimationUtils.loadAnimation(mContext, R.anim.popup_anim_down);
try {
//设置滑出动画
layoutView.startAnimation(animUp);
} catch (Exception e) {
e.printStackTrace();
}
//获取当前Activity所在的窗体
Window dialogWindow = mDialog.getWindow();
mDialog.setCanceledOnTouchOutside(true);
//设置Dialog从窗体底部弹出
if (dialogWindow != null) {
dialogWindow.setGravity(Gravity.BOTTOM);
//获得窗体的属性
WindowManager.LayoutParams lp = dialogWindow.getAttributes();
lp.width = context.getWindowManager().getDefaultDisplay().getWidth();
//设置Dialog距离底部的距离
//lp.y = 30;
// 将属性设置给窗体
dialogWindow.setAttributes(lp);
}
List<String> reasonList = new ArrayList<>();
reasonList.add("有害/不安全");
reasonList.add("涉嫌广告");
reasonList.add("虚假信息");
reasonList.add("不准确");
reasonList.add("毫无作用");
reasonList.add("其他原因");
for(String content : reasonList){
ReportEntity entity = new ReportEntity(content,false);
reportList.add(entity);
}
imgClose = layoutView.findViewById(R.id.img_close);
rvDatas = layoutView.findViewById(R.id.rv_reasons);
tvCommit = layoutView.findViewById(R.id.tv_commit);
imgClose.setOnClickListener(onclick);
tvCommit.setOnClickListener(onclick);
ReasonAdapter adapter = new ReasonAdapter(R.layout.order_cancel_item_layout,reportList,mReason);
rvDatas.setAdapter(adapter);
adapter.setOnItemClickListener(new BaseQuickAdapter.OnItemClickListener() {
@Override
public void onItemClick(BaseQuickAdapter ada, View view, int position) {
if(mListener != null){
adapter.setSelectPos(position);
}
}
});
}
View.OnClickListener onclick = new View.OnClickListener() {
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.img_close:
mDialog.dismiss();
break;
case R.id.tv_commit:
boolean hasSel = false;
ReportEntity selEntity = null;
for(ReportEntity entity : reportList){
if(entity.isCheck()){
hasSel = true;
selEntity = entity;
}
}
if(!hasSel){
ToastUtil.showShort(mContext,"请选择举报/反馈理由");
return;
}
if(mListener != null){
mListener.callBackDatas(selEntity.getReportReason());
dismiss();
}
break;
}
}
};
public void show() {
if(mDialog != null){
mDialog.show();
}
}
public void dismiss() {
if(mDialog != null){
mDialog.dismiss();
}
}
class ReasonAdapter extends BaseQuickAdapter<ReportEntity, BaseViewHolder>{
private String mReason = "";
private int mPos = -1;
public ReasonAdapter(int layoutResId, @Nullable List<ReportEntity> data,String reason) {
super(layoutResId, data);
mReason = reason;
}
public void setSelectPos(int position){
mPos = position;
List<ReportEntity> list = getData();
for (int i = 0; i < list.size(); i++) {
list.get(i).setCheck(i == position);
}
notifyDataSetChanged();
};
@Override
protected void convert(BaseViewHolder helper, ReportEntity item) {
RadioButton radioButton = helper.getView(R.id.radio6);
helper.setText(R.id.tv_reason, item.getReportReason());
int adapterPosition = helper.getAdapterPosition();
radioButton.setChecked(mPos == adapterPosition);
// 添加点击事件
helper.itemView.setOnClickListener(v -> {
if (mPos != adapterPosition) { // 不允许取消选中,只能换选项
setSelectPos(adapterPosition);
}
});
}
}
}

View File

@@ -0,0 +1,227 @@
package com.ckkj.water.dialog;
import android.Manifest;
import android.app.Activity;
import android.app.Dialog;
import android.app.DownloadManager;
import android.app.NotificationManager;
import android.content.Context;
import android.content.pm.PackageManager;
import android.os.Build;
import android.os.Environment;
import android.text.Html;
import android.view.Gravity;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.RelativeLayout;
import android.widget.TextView;
import androidx.core.app.NotificationCompat;
import androidx.core.content.ContextCompat;
import com.chiclaim.android.downloader.DownloadRequest;
import com.ckkj.water.AppConfig;
import com.ckkj.water.R;
import com.ckkj.water.main.entity.CheckVersionEntity;
import com.ckkj.water.utils.DownLoadApk;
import com.ckkj.water.utils.FileNameHelper;
import com.ckkj.water.utils.show.ToastUtil;
import java.io.File;
/**
* @author messi.mo
* @date 2017/11/22
* 底部选择框
*/
public class DialogAppUpdate {
public static View layoutView;
private Dialog mDialog;
private Activity mContext;
private TextView tvTitle,tvContent,tvConfirm,tvCancel;
private RelativeLayout rlUpdateContent;
private ImageView imgClose,imgClear;
private String startTime = "";
private String endTime = "";
private DialogListener mListener;
private Animation animUp;
private Animation animDown;
private ProgressBar progressBar;
private String mDwonLoadUrl = "";
// private String mDwonLoadUrl = "https://jsjk-private.oss-cn-hangzhou.aliyuncs.com/invoice/2024-11-26/3a9c5e76b4bb4ae297a219a663e9e82a.png";
private DownloadManager downloadManager;
private long downloadId;
private NotificationManager notificationManager;
private NotificationCompat.Builder notificationBuilder;
private final String CHANNEL_ID = "download_channel"; // 通知渠道ID
private boolean mIsForceUpdate;
private CheckVersionEntity mVersionBean;
public void setOnDialogListener(DialogListener listener){
this.mListener = listener;
}
public interface DialogListener{
void callBackGetPermisson(String permission);
void downLoadFinish();
}
public DialogAppUpdate(Activity context, int layoutId, boolean isForceUpdate, CheckVersionEntity bean) {
this.mContext = context;
this.mIsForceUpdate = isForceUpdate;
this.mVersionBean = bean;
mDwonLoadUrl = bean.getVersionUrl();
mDialog = new Dialog(context, R.style.ActionSheetDialogStyle);
//填充对话框的布局
layoutView = LayoutInflater.from(context).inflate(layoutId, null);
//将布局设置给Dialog
mDialog.setContentView(layoutView);
// 为弹出和关闭设置动画
animUp = AnimationUtils.loadAnimation(mContext, R.anim.popup_anim_up);
animDown = AnimationUtils.loadAnimation(mContext, R.anim.popup_anim_down);
try {
//设置滑出动画
// layoutView.startAnimation(animUp);
} catch (Exception e) {
e.printStackTrace();
}
//获取当前Activity所在的窗体
Window dialogWindow = mDialog.getWindow();
mDialog.setOnKeyListener((dialog1, keyCode, event) -> {
if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN) {
// 如果需要拦截返回键,返回 true
return true;
}
return false; // 不拦截其他按键
});
mDialog.setCanceledOnTouchOutside(false);
//设置Dialog从窗体底部弹出
if (dialogWindow != null) {
dialogWindow.setGravity(Gravity.CENTER_VERTICAL);
//获得窗体的属性
WindowManager.LayoutParams lp = dialogWindow.getAttributes();
lp.width = context.getWindowManager().getDefaultDisplay().getWidth();
//设置Dialog距离底部的距离
//lp.y = 30;
// 将属性设置给窗体
dialogWindow.setAttributes(lp);
}
tvTitle = layoutView.findViewById(R.id.tv_title);
tvContent = layoutView.findViewById(R.id.tv_update_content);
tvConfirm = layoutView.findViewById(R.id.tv_update);
tvCancel = layoutView.findViewById(R.id.tv_cencel);
progressBar = layoutView.findViewById(R.id.progress_bar);
rlUpdateContent = layoutView.findViewById(R.id.rel_file_content);
tvConfirm.setOnClickListener(onclick);
tvCancel.setOnClickListener(onclick);
if(isForceUpdate){
tvCancel.setVisibility(View.GONE);
}
// 初始化 DownloadManager
downloadManager = (DownloadManager) mContext.getSystemService(Context.DOWNLOAD_SERVICE);
notificationManager = (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
tvContent.setText(Html.fromHtml(bean.getVersionDescription(), Html.FROM_HTML_MODE_LEGACY));
} else {
}
String [] desStr = bean.getVersionDescription().split("#");
String desLine = "";
for(String str : desStr){
desLine = desLine + str + "\n";
}
tvContent.setText(desLine);
tvContent.setLineSpacing(0, 1.2f);
}
private DownloadRequest request;
View.OnClickListener onclick = new View.OnClickListener() {
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.tv_update:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (ContextCompat.checkSelfPermission(mContext, Manifest.permission.WRITE_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
if(mListener != null){
mListener.callBackGetPermisson(Manifest.permission.WRITE_EXTERNAL_STORAGE);
}
return;
}
}
startUpdateApp();
break;
case R.id.tv_cencel:
dismiss();
AppConfig.USER_CONFIRM_UPDATE_APP = true;
break;
}
}
};
public void startUpdateApp() {
//强制更新不需要隐藏dialog
if(mIsForceUpdate){
progressBar.setVisibility(View.VISIBLE);
rlUpdateContent.setVisibility(View.GONE);
progressBar.setMax(100);
}else{
ToastUtil.showShort(mContext,"可在任务栏查看下载进度");
dismiss();
}
String fileName = FileNameHelper.getFileNameFromUrl(mDwonLoadUrl);
File downloadDir = Environment.getExternalStorageDirectory();
File apkFile = new File(downloadDir, fileName);
String apkPath = apkFile.getAbsolutePath();
DownLoadApk downloadTask = new DownLoadApk(mContext,mIsForceUpdate);
downloadTask.startDownload(mDwonLoadUrl, fileName,apkPath);
downloadTask.setDownLoadCallback(new DownLoadApk.DownLoadCallback() {
@Override
public void updateProgress(long currentProgress, long total) {
int progress = (int) ((currentProgress * 100) / total);
progressBar.setProgress(progress);
mContext.runOnUiThread(new Runnable() {
@Override
public void run() {
tvTitle.setText("正在下载 " + progress + "%");
}
});
}
@Override
public void downLoadFinish() {
if(mListener != null){
mListener.downLoadFinish();
}
}
});
}
public void show() {
if(mDialog != null){
mDialog.show();
}
}
public void dismiss() {
if(mDialog != null){
mDialog.dismiss();
}
}
}

View File

@@ -0,0 +1,115 @@
package com.ckkj.water.dialog;
import android.animation.ObjectAnimator;
import android.animation.ValueAnimator;
import android.annotation.SuppressLint;
import android.app.Dialog;
import android.content.Context;
import android.os.Bundle;
import android.os.Handler;
import android.view.WindowManager;
import android.view.animation.LinearInterpolator;
import android.widget.ImageView;
import android.widget.TextView;
import com.ckkj.water.R;
import java.util.Objects;
/**
* author:
* time: 2019/9/18 9:34
* desc:
* version: 1.0.0
*/
public class LoadingDialog extends Dialog {
private String string="";
private TextView textView;
private Context context;
private String [] strLoadContent = {"加载中.","加载中..","加载中..."};
private int mIndex = 0;
private TextView tvLoading;
private Handler handler = new Handler();
// 创建一个Runnable对象用于定时执行任务
Runnable runnable = new Runnable() {
@Override
public void run() {
// 在这里编写需要定时执行的操作
// 比如更新UI、发送网络请求等
if(tvLoading != null){
tvLoading.setText(strLoadContent[mIndex]);
mIndex ++;
if(mIndex == strLoadContent.length){
mIndex = 0;
}
}
handler.postDelayed(this, 300);
}
};
public LoadingDialog(Context context) {
super(context); // 应用透明背景样式
this.context=context;
}
public LoadingDialog(Context context, String s) {
super(context);
this.string=s;
this.context=context;
}
public LoadingDialog(Context context, int theme) {
super(context, theme);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
init();
}
@SuppressLint("ResourceAsColor")
private void init() {
// 设置对话框背景为透明
getWindow().setBackgroundDrawable(context.getResources().getDrawable(R.color.translucent_black_95));
getWindow().setDimAmount(0.2f);
setCancelable(true);
setCanceledOnTouchOutside(false);
setContentView(R.layout.dialog_loading_my);//loading的xml文件
tvLoading = findViewById(R.id.tv_load_dialog);
ImageView imgLoading = findViewById(R.id.img_loading);
// 初始化 ObjectAnimator
ObjectAnimator rotateAnimator = ObjectAnimator.ofFloat(imgLoading, "rotation", 0f, 360f);
rotateAnimator.setDuration(1500);
rotateAnimator.setRepeatCount(ValueAnimator.INFINITE);
rotateAnimator.setInterpolator(new LinearInterpolator()); // 匀速旋转
rotateAnimator.start();
//加载动画资源
// Drawable animation = (AnimationDrawable) imgLoading.getDrawable();
// ((AnimationDrawable) animation).start();
WindowManager.LayoutParams params = Objects.requireNonNull(getWindow()).getAttributes();
params.width = WindowManager.LayoutParams.MATCH_PARENT;
params.height = WindowManager.LayoutParams.MATCH_PARENT;
getWindow().setAttributes(params);
// 可选: 设置窗口大小
getWindow().setLayout(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.MATCH_PARENT);
}
@Override
public void show() {//开启
// if (context==null){
// return;
// }
super.show();
}
@Override
public void dismiss() {//关闭
// if (context==null){
// return;
// }
super.dismiss();
}
}

View File

@@ -0,0 +1,141 @@
package com.ckkj.water.dialog;
import android.app.Activity;
import android.app.Dialog;
import android.content.Context;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.ImageView;
import android.widget.RadioButton;
import android.widget.RelativeLayout;
import android.widget.TextView;
import com.ckkj.water.R;
/**
* @author messi.mo
* @date 2017/11/22
* 底部选择框
*/
public class PayTypeDialog {
public static View layoutView;
private Dialog mDialog;
private Context mContext;
private ImageView imgClose,imgClear;
private DialogListener mListener;
private Animation animUp;
private Animation animDown;
private RelativeLayout rlAliPay,rlWxPay;
private TextView tvPay;
private RadioButton mRdBtnAlipay,mRdBtnWxpay;
private int mPayCode = 100;//100支付宝 200微信
public void setOnDialogListener(DialogListener listener){
this.mListener = listener;
}
public interface DialogListener{
void goToPay(int payCode);
}
public PayTypeDialog(Activity context, String payInfo, String payPriceInfo) {
this.mContext = context;
mDialog = new Dialog(context, R.style.ActionSheetDialogStyle);
//填充对话框的布局
layoutView = LayoutInflater.from(context).inflate(R.layout.dialog_pay_option_layout, null);
//将布局设置给Dialog
mDialog.setContentView(layoutView);
// 为弹出和关闭设置动画
animUp = AnimationUtils.loadAnimation(mContext, R.anim.popup_anim_up);
animDown = AnimationUtils.loadAnimation(mContext, R.anim.popup_anim_down);
try {
//设置滑出动画
layoutView.startAnimation(animUp);
} catch (Exception e) {
e.printStackTrace();
}
//获取当前Activity所在的窗体
Window dialogWindow = mDialog.getWindow();
mDialog.setCanceledOnTouchOutside(true);
//设置Dialog从窗体底部弹出
if (dialogWindow != null) {
dialogWindow.setGravity(Gravity.BOTTOM);
//获得窗体的属性
WindowManager.LayoutParams lp = dialogWindow.getAttributes();
lp.width = context.getWindowManager().getDefaultDisplay().getWidth();
//设置Dialog距离底部的距离
//lp.y = 30;
// 将属性设置给窗体
dialogWindow.setAttributes(lp);
}
imgClose = layoutView.findViewById(R.id.img_close);
rlAliPay = layoutView.findViewById(R.id.rl_zfb);
rlWxPay = layoutView.findViewById(R.id.rl_wx);
tvPay = layoutView.findViewById(R.id.tv_go_pay);
mRdBtnAlipay = layoutView.findViewById(R.id.radio_zdb);
mRdBtnWxpay = layoutView.findViewById(R.id.radio_wx);
TextView tvPayInfo = layoutView.findViewById(R.id.tv_pay_info);
TextView tvPayPriceInfo = layoutView.findViewById(R.id.tv_pay_price);
imgClose.setOnClickListener(onclick);
tvPay.setOnClickListener(onclick);
rlAliPay.setOnClickListener(onclick);
rlWxPay.setOnClickListener(onclick);
tvPayInfo.setText("支付账单信息:" + payInfo);
tvPayPriceInfo.setText("实付金额: ¥" + payPriceInfo);
}
View.OnClickListener onclick = new View.OnClickListener() {
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.img_close:
mDialog.dismiss();
break;
case R.id.rl_zfb:
mPayCode = 100;
mRdBtnAlipay.setChecked(true);
mRdBtnWxpay.setChecked(false);
break;
case R.id.rl_wx:
mPayCode = 200;
mRdBtnAlipay.setChecked(false);
mRdBtnWxpay.setChecked(true);
break;
case R.id.tv_go_pay:
if(mListener != null){
mListener.goToPay(mPayCode);
dismiss();
}
break;
}
}
};
public void show() {
if(mDialog != null){
mDialog.show();
}
}
public void dismiss() {
if(mDialog != null){
mDialog.dismiss();
}
}
}

View File

@@ -0,0 +1,197 @@
package com.ckkj.water.dialog;
import android.app.Activity;
import android.app.Dialog;
import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.Environment;
import android.provider.MediaStore;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import com.google.zxing.client.android.utils.ZXingUtils;
import com.ckkj.water.AppConfig;
import com.ckkj.water.R;
import com.ckkj.water.utils.show.ToastUtil;
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;
/**
* @author messi.mo
* @date 2017/11/22
* 底部选择框
*/
public class ShareQrcodeDialog {
public static View layoutView;
private Dialog mDialog;
private Context mContext;
private TextView tvOneMonth,tvThreeMonth,tvSixMonth,tvStartTime,tvEndTime,tvClear,tvConfirm;
private ImageView imgDown,imgCopy,imgHb,imgQrcode;
private String startTime = "";
private RelativeLayout rlHaibao;
private String endTime = "";
private DialogListener mListener;
private Animation animUp;
private Animation animDown;
private List<Drawable> mImgUrls = new ArrayList<>();
private String mInviteeCode = "";
public void setOnDialogListener(DialogListener listener){
this.mListener = listener;
}
public interface DialogListener{
void downShape();
void copyLink(String url);
}
public ShareQrcodeDialog(Activity context, int layoutId,String shareCode) {
this.mContext = context;
this.mInviteeCode = shareCode;
mDialog = new Dialog(context, R.style.ActionShareDialogStyle);
//填充对话框的布局
layoutView = LayoutInflater.from(context).inflate(layoutId, null);
//将布局设置给Dialog
mDialog.setContentView(layoutView);
// 为弹出和关闭设置动画
animUp = AnimationUtils.loadAnimation(mContext, R.anim.popup_anim_up);
animDown = AnimationUtils.loadAnimation(mContext, R.anim.popup_anim_down);
try {
//设置滑出动画
layoutView.startAnimation(animUp);
} catch (Exception e) {
e.printStackTrace();
}
//获取当前Activity所在的窗体
Window dialogWindow = mDialog.getWindow();
mDialog.setCanceledOnTouchOutside(true);
//设置Dialog在屏幕中间显示
if (dialogWindow != null) {
dialogWindow.setGravity(Gravity.CENTER);
//获得窗体的属性
WindowManager.LayoutParams lp = dialogWindow.getAttributes();
// 设置Dialog宽度为屏幕宽度的85%(可根据需要调整)
int screenWidth = context.getWindowManager().getDefaultDisplay().getWidth();
lp.width = (int) (screenWidth * 0.85);
int screenHeight = context.getWindowManager().getDefaultDisplay().getHeight();
lp.height = (int) (screenHeight * 0.85);
//将属性设置给窗体
dialogWindow.setAttributes(lp);
}
//添加图片集合
mImgUrls.add(mContext.getResources().getDrawable(R.mipmap.img_share_bg));
imgDown = layoutView.findViewById(R.id.img_down);
imgCopy = layoutView.findViewById(R.id.img_copy);
imgHb = layoutView.findViewById(R.id.img_haibao);
imgQrcode = layoutView.findViewById(R.id.img_qr_code);
rlHaibao = layoutView.findViewById(R.id.relative_hb);
imgDown.setOnClickListener(onclick);
imgCopy.setOnClickListener(onclick);
authUrlToQrcode(shareCode);
}
View.OnClickListener onclick = new View.OnClickListener() {
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.img_down:
saveLayoutAsImage();
break;
case R.id.img_copy:
ClipboardManager clipboard = (ClipboardManager) mContext.getSystemService(Context.CLIPBOARD_SERVICE);
ClipData clip = ClipData.newPlainText("label", AppConfig.USER_SHARE_URL + mInviteeCode);
clipboard.setPrimaryClip(clip);
ToastUtil.showShort(mContext,"已复制邀请链接");
mDialog.dismiss();
break;
}
}
};
/**
* 保存名片的 bitmap 到手机相册中
*/
private void saveLayoutAsImage() {
// 1. 创建 Bitmap
Bitmap bitmap = Bitmap.createBitmap(rlHaibao.getWidth(), rlHaibao.getHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
rlHaibao.draw(canvas);
// 2. 保存到 MediaStoreAndroid 10+ 适用)
String filename = "layout_" + System.currentTimeMillis() + ".png";
ContentValues values = new ContentValues();
values.put(MediaStore.Images.Media.DISPLAY_NAME, filename);
values.put(MediaStore.Images.Media.MIME_TYPE, "image/png");
values.put(MediaStore.Images.Media.RELATIVE_PATH, Environment.DIRECTORY_PICTURES + "/MyLayouts");
ContentResolver resolver = mContext.getContentResolver();
Uri uri = resolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
if (uri != null) {
try (OutputStream out = resolver.openOutputStream(uri)) {
bitmap.compress(Bitmap.CompressFormat.PNG, 100, out);
ToastUtil.showShort(mContext,"保存成功");
mDialog.dismiss();
} catch (IOException e) {
e.printStackTrace();
ToastUtil.showShort(mContext,"保存失败:" + e.getMessage());
mDialog.dismiss();
}
}
}
/**
* url转为二维码显示
* @param data
*/
private void authUrlToQrcode(String data) {
try {
Bitmap qrImage = ZXingUtils.createQRCodeImage(AppConfig.USER_SHARE_URL + data);
imgQrcode.setImageBitmap(qrImage);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public void show() {
if(mDialog != null){
mDialog.show();
}
}
public void dismiss() {
if(mDialog != null){
mDialog.dismiss();
}
}
}