package com.xmkjsoft.xhgh.fragment;
import static android.app.Activity.RESULT_OK;
import android.Manifest;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.graphics.Bitmap;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.Toast;
import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AlertDialog;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import androidx.core.content.FileProvider;
import androidx.fragment.app.DialogFragment;
import androidx.fragment.app.FragmentActivity;
import com.bumptech.glide.Glide;
import com.bumptech.glide.request.RequestOptions;
import com.bumptech.glide.request.target.CustomTarget;
import com.bumptech.glide.request.transition.Transition;
import com.xmkjsoft.xhgh.R;
import com.yalantis.ucrop.UCrop;
import java.io.File;
import java.io.IOException;
import java.io.OutputStream;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
public class FullscreenImageViewerDialogFragment4 extends DialogFragment {
private static final String ARG_IMAGE_URI = "image_uri";
private Uri imageUri;
private ActivityResultLauncher<Intent> cropLauncher;
private ImageView imageView; // Declare ImageView as a class-level member
public static FullscreenImageViewerDialogFragment4 newInstance(Uri uri) {
FullscreenImageViewerDialogFragment4 fragment = new FullscreenImageViewerDialogFragment4();
Bundle args = new Bundle();
args.putParcelable(ARG_IMAGE_URI, uri);
fragment.setArguments(args);
return fragment;
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.dialog_fullscreen_image_viewer_4, container, false);
// 点击 Dialog 外部区域关闭 Dialog
// view.setOnTouchListener((v, event) -> {
// dismiss();
// return true;
// });
imageView = view.findViewById(R.id.fullscreen_image);
if (getArguments() != null) {
imageUri = getArguments().getParcelable(ARG_IMAGE_URI);
}
if (imageUri != null) {
Glide.with(this)
.load(imageUri)
.apply(new RequestOptions().placeholder(R.color.main_color).error(R.color.main_color))
.into(new CustomTarget<Drawable>() {
@Override
public void onResourceReady(@NonNull Drawable resource, @Nullable Transition<? super Drawable> transition) {
imageView.setImageDrawable(resource);
// 在图片加载成功后再启动裁剪
startCrop(imageUri);
}
@Override
public void onLoadCleared(@Nullable Drawable placeholder) {
// Placeholder处理
imageView.setImageDrawable(placeholder);
}
});
} else {
imageView.setImageResource(R.color.main_color); // 如果 imageUri 为空,显示占位符或错误图片
}
return view;
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Set style for full-screen dialog
setStyle(DialogFragment.STYLE_NORMAL, android.R.style.Theme_Black_NoTitleBar_Fullscreen);
// Initialize ActivityResultLauncher for UCrop
cropLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), result -> {
if (result.getResultCode() == getActivity().RESULT_OK && result.getData() != null) {
Intent data = result.getData();
handleCropResult(data);
} else if (result.getResultCode() == UCrop.RESULT_ERROR && result.getData() != null) {
Intent data = result.getData();
handleCropError(data);
}
});
}
private void startCrop(@NonNull Uri uri) {
String destinationFileName = "SampleCropImage.jpg";
Uri destinationUri = Uri.fromFile(new File(requireContext().getCacheDir(), destinationFileName));
UCrop uCrop = UCrop.of(uri, destinationUri);
uCrop.withAspectRatio(1, 1); // 设置剪裁比例
uCrop.withMaxResultSize(450, 450); // 设置最大剪裁尺寸
Intent intent = uCrop.getIntent(requireContext());
cropLauncher.launch(intent);
}
private void handleCropResult(Intent data) {
final Uri resultUri = UCrop.getOutput(data);
if (resultUri != null) {
// 处理剪裁后的图片,比如显示在ImageView中
imageView.setImageURI(resultUri);
Toast.makeText(getContext(), "剪裁回调"+resultUri, Toast.LENGTH_SHORT).show();
System.out.println("剪裁回调"+resultUri);
}
}
private void handleCropError(Intent data) {
final Throwable cropError = UCrop.getError(data);
// 处理剪裁错误
if (cropError != null) {
Toast.makeText(getContext(), cropError.getMessage(), Toast.LENGTH_SHORT).show();
}
}
}
怎么使用?
private void openImageViewerFragment(Uri uri) {
FragmentActivity activity = getActivity(); // 获取当前 Activity 的上下文
if (activity != null) {
// 创建并显示新的 Fragment
FullscreenImageViewerDialogFragment4 fragment = FullscreenImageViewerDialogFragment4.newInstance(uri);
fragment.show(activity.getSupportFragmentManager(), "FullscreenImageViewerDialogFragment4");
// 关闭当前 Fragment
dismiss();
}
}
在androidmanifest.xml 加入
<activity
android:name="com.yalantis.ucrop.UCropActivity"
android:theme="@style/Theme.AppCompat.Light.NoActionBar"/>
对了,还要添加依赖啊:
implementation 'com.github.yalantis:ucrop:2.2.6'