| | |
| | | package com.application.zhangshi_app_android.ui.personal_center; |
| | | |
| | | import android.content.Context; |
| | | import android.content.Intent; |
| | | import android.graphics.Bitmap; |
| | | import android.graphics.drawable.ColorDrawable; |
| | | import android.graphics.drawable.Drawable; |
| | | import android.net.Uri; |
| | | import android.os.Bundle; |
| | | import android.util.Log; |
| | | import android.view.View; |
| | | import android.view.ViewGroup; |
| | | import android.widget.ImageView; |
| | | import android.widget.PopupWindow; |
| | | |
| | | import androidx.annotation.NonNull; |
| | | import androidx.annotation.Nullable; |
| | | import androidx.core.content.ContextCompat; |
| | | import androidx.fragment.app.Fragment; |
| | | |
| | | import com.android.app_base.base.dialog.BaseDialog; |
| | | import com.android.app_base.base.dialog.UIDialog; |
| | | import com.android.app_base.base.dialog.WaitDialog; |
| | | import com.android.app_base.base.view.BaseFragment; |
| | | import com.android.app_base.manager.AppManager; |
| | | import com.android.app_base.manager.UserManager; |
| | | import com.android.app_base.utils.GlideEngine; |
| | | import com.android.app_base.utils.ScreenSizeUtils; |
| | | import com.android.app_base.utils.Utils; |
| | | import com.android.app_base.utils.rxbus.MessageEvent; |
| | | import com.android.app_base.utils.rxbus.RxBus; |
| | | import com.application.zhangshi_app_android.BR; |
| | | import com.application.zhangshi_app_android.R; |
| | | import com.application.zhangshi_app_android.bean.AnnualHealthStatusBean; |
| | | import com.application.zhangshi_app_android.bean.GrowthExperienceInformationBean; |
| | | import com.application.zhangshi_app_android.databinding.FragmentPersonalCenterBinding; |
| | | import com.application.zhangshi_app_android.ui.DLBaseFragment; |
| | | import com.application.zhangshi_app_android.ui.dialog.PetOwnerInfoDialog; |
| | | import com.application.zhangshi_app_android.ui.function.PetMemoActivity; |
| | | import com.application.zhangshi_app_android.ui.login.LoginActivity; |
| | | import com.bumptech.glide.Glide; |
| | | import com.bumptech.glide.request.target.CustomTarget; |
| | | import com.bumptech.glide.request.transition.Transition; |
| | | import com.luck.picture.lib.basic.PictureSelector; |
| | | import com.luck.picture.lib.config.SelectMimeType; |
| | | import com.luck.picture.lib.engine.CropFileEngine; |
| | | import com.luck.picture.lib.entity.LocalMedia; |
| | | import com.luck.picture.lib.interfaces.OnResultCallbackListener; |
| | | import com.luck.picture.lib.style.PictureSelectorStyle; |
| | | import com.luck.picture.lib.style.SelectMainStyle; |
| | | import com.luck.picture.lib.style.TitleBarStyle; |
| | | import com.luck.picture.lib.utils.PictureFileUtils; |
| | | import com.luck.picture.lib.utils.StyleUtils; |
| | | import com.yalantis.ucrop.UCrop; |
| | | import com.yalantis.ucrop.UCropImageEngine; |
| | | import com.yalantis.ucrop.model.AspectRatio; |
| | | |
| | | import java.io.File; |
| | | import java.util.ArrayList; |
| | | import java.util.List; |
| | | |
| | | import io.reactivex.Observer; |
| | | import io.reactivex.functions.Consumer; |
| | |
| | | */ |
| | | public class PersonalCenterFragment extends DLBaseFragment<FragmentPersonalCenterBinding,PersonalCenterFragmentViewModel> { |
| | | private PopupWindow popupWindow; |
| | | private BaseDialog mWaitDialog; |
| | | |
| | | public PersonalCenterFragment() { |
| | | } |
| | |
| | | |
| | | } |
| | | }); |
| | | binding.ivHead.setOnClickListener(new View.OnClickListener() { |
| | | @Override |
| | | public void onClick(View v) { |
| | | PictureSelector.create(getSelfActivity()) |
| | | .openGallery(SelectMimeType.ofImage()) |
| | | .setImageEngine(GlideEngine.createGlideEngine()) |
| | | .setCropEngine(new ImageFileCropEngine())// 设置裁剪引擎 |
| | | .isMaxSelectEnabledMask(true)// 达到最大选择数是否开启禁选蒙层 |
| | | .setMaxSelectNum(1) |
| | | .forResult(new OnResultCallbackListener<LocalMedia>() { |
| | | @Override |
| | | public void onResult(ArrayList<LocalMedia> result) { |
| | | if (result.size() == 0) return; |
| | | for (LocalMedia media : result) { |
| | | if (media.isCut()){ |
| | | viewModel.updateInfo(media.getCutPath()); |
| | | }else { |
| | | viewModel.updateInfo(media.getRealPath()); |
| | | } |
| | | } |
| | | |
| | | } |
| | | |
| | | @Override |
| | | public void onCancel() { |
| | | |
| | | } |
| | | }); |
| | | } |
| | | }); |
| | | } |
| | | |
| | | @Override |
| | |
| | | protected boolean isStatusBarImmersionEnabled() { |
| | | return true; |
| | | } |
| | | |
| | | @Override |
| | | protected void dialogLoading() { |
| | | if (mWaitDialog == null) { |
| | | mWaitDialog = new WaitDialog.Builder(getSelfActivity()) |
| | | // 消息文本可以不用填写 |
| | | .setMessage("正在上传头像") |
| | | .create(); |
| | | } |
| | | if (!mWaitDialog.isShowing()) { |
| | | mWaitDialog.show(); |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | protected void dialogDismiss() { |
| | | if (mWaitDialog != null && mWaitDialog.isShowing()) { |
| | | mWaitDialog.dismiss(); |
| | | mWaitDialog = null; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 自定义裁剪 |
| | | */ |
| | | private class ImageFileCropEngine implements CropFileEngine { |
| | | |
| | | @Override |
| | | public void onStartCrop(Fragment fragment, Uri srcUri, Uri destinationUri, ArrayList<String> dataSource, int requestCode) { |
| | | UCrop.Options options = buildOptions(); |
| | | UCrop uCrop = UCrop.of(srcUri, destinationUri, dataSource); |
| | | uCrop.withOptions(options); |
| | | uCrop.setImageEngine(new UCropImageEngine() { |
| | | @Override |
| | | public void loadImage(Context context, String url, ImageView imageView) { |
| | | Glide.with(context).load(url).override(180, 180).into(imageView); |
| | | } |
| | | |
| | | @Override |
| | | public void loadImage(Context context, Uri url, int maxWidth, int maxHeight, OnCallbackListener<Bitmap> call) { |
| | | Glide.with(context).asBitmap().load(url).override(maxWidth, maxHeight).into(new CustomTarget<Bitmap>() { |
| | | @Override |
| | | public void onResourceReady(@NonNull Bitmap resource, @Nullable Transition<? super Bitmap> transition) { |
| | | if (call != null) { |
| | | call.onCall(resource); |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | public void onLoadCleared(@Nullable Drawable placeholder) { |
| | | if (call != null) { |
| | | call.onCall(null); |
| | | } |
| | | } |
| | | }); |
| | | } |
| | | }); |
| | | uCrop.start(fragment.requireActivity(), fragment, requestCode); |
| | | } |
| | | } |
| | | /** |
| | | * 配制UCrop,可根据需求自我扩展 |
| | | * |
| | | * @return |
| | | */ |
| | | private UCrop.Options buildOptions() { |
| | | PictureSelectorStyle selectorStyle = new PictureSelectorStyle(); |
| | | |
| | | UCrop.Options options = new UCrop.Options(); |
| | | options.setHideBottomControls(true);//是否显示底部裁剪菜单栏 |
| | | options.setFreeStyleCropEnabled(false);//裁剪框or图片拖动 |
| | | options.setShowCropFrame(true);//是否显示裁剪边框 |
| | | options.setShowCropGrid(true);//是否显示裁剪网格线 |
| | | options.setCircleDimmedLayer(false);//是否圆形裁剪 |
| | | options.withAspectRatio(1, 1);//裁剪比例 |
| | | options.setAspectRatioOptions(3, |
| | | new AspectRatio("16:9", 16, 9), |
| | | new AspectRatio("3:2", 3, 2), |
| | | new AspectRatio("4:3", 4, 3), |
| | | new AspectRatio("1:1", 1, 1));//自选裁剪比例,受setHideBottomControls影响可见 |
| | | options.setCropOutputPathDir(getSandboxPath());//裁剪输出路径 |
| | | options.isCropDragSmoothToCenter(false);//裁剪拖动是否自动居中 |
| | | options.isForbidSkipMultipleCrop(true);//是否多图裁剪时禁止跳过 |
| | | options.setMaxScaleMultiplier(100);//设置最大缩放比例 |
| | | if (selectorStyle != null && selectorStyle.getSelectMainStyle().getStatusBarColor() != 0) { |
| | | SelectMainStyle mainStyle = selectorStyle.getSelectMainStyle(); |
| | | boolean isDarkStatusBarBlack = mainStyle.isDarkStatusBarBlack(); |
| | | int statusBarColor = mainStyle.getStatusBarColor(); |
| | | options.isDarkStatusBarBlack(isDarkStatusBarBlack); |
| | | if (StyleUtils.checkStyleValidity(statusBarColor)) { |
| | | options.setStatusBarColor(statusBarColor); |
| | | options.setToolbarColor(statusBarColor); |
| | | } else { |
| | | options.setStatusBarColor(ContextCompat.getColor(getSelfActivity(), com.luck.picture.lib.R.color.ps_color_grey)); |
| | | options.setToolbarColor(ContextCompat.getColor(getSelfActivity(), com.luck.picture.lib.R.color.ps_color_grey)); |
| | | } |
| | | TitleBarStyle titleBarStyle = selectorStyle.getTitleBarStyle(); |
| | | if (StyleUtils.checkStyleValidity(titleBarStyle.getTitleTextColor())) { |
| | | options.setToolbarWidgetColor(titleBarStyle.getTitleTextColor()); |
| | | } else { |
| | | options.setToolbarWidgetColor(ContextCompat.getColor(getSelfActivity(), com.luck.picture.lib.R.color.ps_color_white)); |
| | | } |
| | | } else { |
| | | options.setStatusBarColor(ContextCompat.getColor(getSelfActivity(), com.luck.picture.lib.R.color.ps_color_grey)); |
| | | options.setToolbarColor(ContextCompat.getColor(getSelfActivity(), com.luck.picture.lib.R.color.ps_color_grey)); |
| | | options.setToolbarWidgetColor(ContextCompat.getColor(getSelfActivity(), com.luck.picture.lib.R.color.ps_color_white)); |
| | | } |
| | | return options; |
| | | } |
| | | |
| | | /** |
| | | * 创建自定义输出目录 |
| | | * |
| | | * @return |
| | | */ |
| | | private String getSandboxPath() { |
| | | File externalFilesDir = getSelfActivity().getExternalFilesDir(""); |
| | | File customFile = new File(externalFilesDir.getAbsolutePath(), "Sandbox"); |
| | | if (!customFile.exists()) { |
| | | customFile.mkdirs(); |
| | | } |
| | | return customFile.getAbsolutePath() + File.separator; |
| | | } |
| | | } |