Commit 8e5b6c30 authored by fallenstardust's avatar fallenstardust

add ImageSelect function

parent dd01f539
......@@ -41,9 +41,13 @@ import android.graphics.Point;
import android.text.TextUtils;
import android.util.Log;
import android.view.WindowManager;
import android.widget.ImageView;
import androidx.annotation.Nullable;
import com.bumptech.glide.load.engine.DiskCacheStrategy;
import com.bumptech.glide.signature.MediaStoreSignature;
import org.json.JSONArray;
import java.io.File;
......@@ -60,6 +64,7 @@ import cn.garymb.ygomobile.utils.DeckUtil;
import cn.garymb.ygomobile.utils.FileUtils;
import cn.garymb.ygomobile.utils.IOUtils;
import cn.garymb.ygomobile.utils.YGOUtil;
import cn.garymb.ygomobile.utils.glide.GlideCompat;
/**
* 静态类
......@@ -474,7 +479,17 @@ public class AppsSettings {
public String getCoreSkinPath() {
return new File(getResourcePath(), Constants.CORE_SKIN_PATH).getAbsolutePath();
}
public String getAvatarPath() {
return new File(getResourcePath(), Constants.CORE_AVATAR_PATH).getAbsolutePath();
}
public String getCoverPath() {
return new File(getResourcePath(), Constants.CORE_COVER_PATH).getAbsolutePath();
}
public String getBgPath() {
return new File(getResourcePath(), Constants.CORE_BG_PATH).getAbsolutePath();
}
/***
* 字体路径
*/
......@@ -739,6 +754,17 @@ public class AppsSettings {
mSharedPreferences.putString(Constants.PREF_LAST_ROOM_LIST, array.toString());
}
public void setImage(String outFile, int outWidth, int outHeight, ImageView imageView) {
File img = new File(outFile);
if (img.exists()) {
GlideCompat.with(context).load(img)
.signature(new MediaStoreSignature("image/*", img.lastModified(), 0))
.diskCacheStrategy(DiskCacheStrategy.NONE)
.override(outWidth, outHeight)
.into(imageView);
}
}
public enum languageEnum {
//todo 逐步将设置语言的代码都更改为languageEnum
Chinese(0, "zh"),
......
......@@ -78,6 +78,9 @@ public interface Constants {
String CORE_SOUND_PATH = "sound";
String CORE_SKIN_PATH = "textures";
String CORE_SKIN_PENDULUM_PATH = CORE_SKIN_PATH + "/extra";
String CORE_AVATAR_PATH = CORE_SKIN_PATH + "/extra/avatars";
String CORE_COVER_PATH = CORE_SKIN_PATH + "/extra/covers";
String CORE_BG_PATH = CORE_SKIN_PATH + "/extra/bgs";
String CORE_DECK_PATH = "deck";
String CORE_PACK_PATH = "pack";
String CORE_EXPANSIONS = "expansions";
......
package cn.garymb.ygomobile.adapter;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import cn.garymb.ygomobile.AppsSettings;
import cn.garymb.ygomobile.bean.ImageItem;
import cn.garymb.ygomobile.lite.R;
import cn.garymb.ygomobile.ui.plus.DialogPlus;
import cn.garymb.ygomobile.utils.CurImageInfo;
import cn.garymb.ygomobile.utils.FileUtils;
import cn.garymb.ygomobile.utils.YGOUtil;
public class DialogImageAdapter extends BaseAdapter {
private DialogPlus mDialogPlus;
private Context context;
private ImageView mImageView;
private ArrayList<ImageItem> imageItems;
private int itemWidth;
private int itemHeight;
private String mFilename;
private AppsSettings mSettings; // 假设AppsSettings是你的设置类
private CurImageInfo mCurImageInfo;
public DialogImageAdapter(DialogPlus dlg, Context context, ImageView imageView, ArrayList<ImageItem> imageItems, int[] itemWidth_itemHeight, String outFile, OnImageSelectedListener listener) {
this.mDialogPlus = dlg;
this.context = context;
this.mImageView = imageView;
this.imageItems = imageItems;
this.itemWidth = itemWidth_itemHeight[0];
this.itemHeight = itemWidth_itemHeight[1];
this.mFilename = outFile;
this.mSettings = AppsSettings.get(); // 获取全局的AppsSettings实例
setOnImageSelectedListener(listener); // 设置监听器
}
// 定义回调接口
public interface OnImageSelectedListener {
void onImageSelected(String outFilePath, String title, int width, int height);
}
private OnImageSelectedListener mListener;
// 提供一个公共方法来设置监听器
public void setOnImageSelectedListener(OnImageSelectedListener listener) {
this.mListener = listener;
}
@Override
public int getCount() {
return imageItems.size();
}
@Override
public Object getItem(int position) {
return imageItems.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
ImageView iv;
final ImageItem item = imageItems.get(position);
if (convertView == null) {
iv = new ImageView(context);
iv.setLayoutParams(new GridView.LayoutParams(itemWidth, itemHeight));
iv.setScaleType(ImageView.ScaleType.FIT_CENTER);
iv.setPadding(3, 3, 3, 3);
} else {
iv = (ImageView) convertView;
}
if (position == 0) {
// 设置特别的item的图标或文本
iv.setImageResource(R.drawable.ic_copy);
iv.setScaleType(ImageView.ScaleType.FIT_CENTER);
// 请替换为实际的图标资源
iv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String outFilePath = new File(mFilename).getAbsolutePath();
mDialogPlus.dismiss();
//打开系统文件相册
showImageCropChooser(outFilePath, context.getString(R.string.dialog_select_image), itemWidth, itemHeight);
}
});
} else {
// 加载普通图片
File imgFile = new File(item.getImagePath());
if (imgFile.exists()) {
Bitmap myBitmap = BitmapFactory.decodeFile(imgFile.getAbsolutePath());
iv.setImageBitmap(myBitmap);
iv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
FileUtils.copyFile(imgFile.getPath(), mFilename);
} catch (IOException e) {
YGOUtil.showTextToast(e + "");
}
mDialogPlus.dismiss();
mSettings.setImage(mFilename, itemWidth, itemHeight, mImageView);
}
});
}
}
return iv;
}
protected void showImageCropChooser(String outFilePath, String title, int width, int height) {
if (mListener != null) {
mListener.onImageSelected(outFilePath, title, width, height);
} else {
YGOUtil.showTextToast("no such listener");
}
}
}
\ No newline at end of file
package cn.garymb.ygomobile.bean;
public class ImageItem {
private String imagePath;
private boolean isSpecialItem;
public ImageItem(String imagePath, boolean isSpecialItem) {
this.imagePath = imagePath;
this.isSpecialItem = isSpecialItem;
}
public String getImagePath() {
return imagePath;
}
public boolean isSpecialItem() {
return isSpecialItem;
}
}
......@@ -88,11 +88,6 @@ public abstract class PreferenceFragmentPlus extends BasePreferenceFragment {
mCurImageInfo.mCurTitle = title;
curPreference = preference;
String defPath = new File(outFile).getParent();
// Intent intent = FileActivity.getIntent(getActivity(), title, "*.[jpg|png|bmp]", defPath, false, FileOpenType.SelectFile);
// startActivityForResult(intent, REQUEST_CHOOSE_IMG);
// intent.addCategory(Intent.CATEGORY_OPENABLE);
// intent.setType("image/*");
ISListConfig config = new ISListConfig.Builder()
// 是否多选, 默认true
.multiSelect(false)
......@@ -112,9 +107,9 @@ public abstract class PreferenceFragmentPlus extends BasePreferenceFragment {
.titleColor(Color.WHITE)
// TitleBar背景色
.titleBgColor(Color.parseColor("#11113d"))
.needCrop(true)
// 裁剪大小。needCrop为true的时候配置
.cropSize(mCurImageInfo.width, mCurImageInfo.height, mCurImageInfo.width, mCurImageInfo.height)
.needCrop(true)
// 第一个是否显示相机,默认true
.needCamera(false)
// 最大选择图片数量,默认9
......@@ -125,46 +120,6 @@ public abstract class PreferenceFragmentPlus extends BasePreferenceFragment {
ISNav.getInstance().toListActivity(this, config, REQUEST_CHOOSE_IMG);
}
//已弃用裁剪
/*
protected void openPhotoCut(Preference preference, Uri srcfile, CurImageInfo info) {
// 裁剪图片
if (srcfile == null || info == null) {
onChooseFileFail(preference);
return;
}
Log.i("我是srcfile", srcfile + "");
File file = new File(info.mOutFile);
Intent intent = new Intent("com.android.camera.action.CROP");
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
saveimgUri = FileProvider.getUriForFile(getContext(), BuildConfig.APPLICATION_ID + ".fallenstardust", file);
} else {
saveimgUri = Uri.fromFile(file);
}
intent.setDataAndType(srcfile, "image/*");
// 下面这个crop=true是设置在开启的Intent中设置显示的VIEW可裁剪
intent.putExtra("crop", "true");
// aspectX aspectY 是宽高的比例
intent.putExtra("aspectX", info.width);
intent.putExtra("aspectY", info.height);
// outputX outputY 是裁剪图片宽高
intent.putExtra("outputX", info.width);
intent.putExtra("outputY", info.height);
intent.putExtra("scale", true);// 黑边
intent.putExtra("scaleUpIfNeeded", true);// 黑边
intent.putExtra("return-data", false);
intent.putExtra(MediaStore.EXTRA_OUTPUT, saveimgUri);
intent.putExtra("outputFormat", info.mJpeg ? Bitmap.CompressFormat.JPEG.toString() : Bitmap.CompressFormat.PNG.toString());
try {
startActivityForResult(Intent.createChooser(intent, info.mCurTitle), Constants.REQUEST_CUT_IMG);
} catch (Exception e) {
Log.i("我是e", e + "");
Toast.makeText(getActivity(), R.string.no_find_image_cutor, Toast.LENGTH_SHORT).show();
}
}*/
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
......
<!-- res/layout/activity_main.xml -->
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:fitsSystemWindows="true"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<GridView
android:id="@+id/gridView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:numColumns="auto_fit"
android:columnWidth="90dp"
android:horizontalSpacing="10dp"
android:verticalSpacing="10dp"
android:stretchMode="columnWidth"
android:padding="5dp" />
</RelativeLayout>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment