feat: 添加CropBackgroundUtils工具类及封面剪裁背景修改功能

- 创建CropBackgroundUtils工具类,实现与BackgroundUtils类似的背景管理功能
- 在封面剪裁窗口(CropActivity)添加"修改剪裁背景颜色"按钮
- 按钮点击后弹出Toast提示信息
- 使用独立的偏好设置存储(crop_background_prefs)
This commit is contained in:
2026-05-02 10:48:28 +08:00
parent a2884122aa
commit 6cf5ac2034
3 changed files with 140 additions and 0 deletions

View File

@@ -87,6 +87,13 @@ public class CropActivity extends AppCompatActivity {
}
});
findViewById(R.id.btn_change_bg).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(CropActivity.this, "修改剪裁背景颜色", Toast.LENGTH_SHORT).show();
}
});
zoomContainer = findViewById(R.id.zoom_container);
SeekBar seekBarZoom = findViewById(R.id.seekbar_zoom);

View File

@@ -0,0 +1,124 @@
package cc.winboll.studio.gallery.utils;
import android.content.Context;
import android.content.SharedPreferences;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable;
import androidx.annotation.ColorInt;
import androidx.annotation.DrawableRes;
import androidx.core.content.ContextCompat;
public class CropBackgroundUtils {
public enum DrawableType {
RESOURCE_ID,
COLOR
}
private static volatile CropBackgroundUtils instance;
private static final String PREF_NAME = "crop_background_prefs";
private static final String KEY_TYPE = "crop_bg_type";
private static final String KEY_RES_ID = "crop_bg_res_id";
private static final String KEY_COLOR = "crop_bg_color";
private Context context;
private Drawable drawable;
private DrawableType drawableType;
private int resId;
private int color;
private CropBackgroundUtils() {
}
public static CropBackgroundUtils getInstance() {
if (instance == null) {
synchronized (CropBackgroundUtils.class) {
if (instance == null) {
instance = new CropBackgroundUtils();
}
}
}
return instance;
}
public static CropBackgroundUtils initFromResource(Context context, @DrawableRes int resId) {
synchronized (CropBackgroundUtils.class) {
CropBackgroundUtils utils = getInstance();
utils.context = context.getApplicationContext();
utils.drawableType = DrawableType.RESOURCE_ID;
utils.resId = resId;
utils.drawable = ContextCompat.getDrawable(utils.context, resId);
utils.saveToPreferences();
return utils;
}
}
public static CropBackgroundUtils initFromColor(Context context, @ColorInt int color) {
synchronized (CropBackgroundUtils.class) {
CropBackgroundUtils utils = getInstance();
utils.context = context.getApplicationContext();
utils.drawableType = DrawableType.COLOR;
utils.color = color;
utils.drawable = new ColorDrawable(color);
utils.saveToPreferences();
return utils;
}
}
public static CropBackgroundUtils initFromPreferences(Context context) {
synchronized (CropBackgroundUtils.class) {
Context appContext = context.getApplicationContext();
SharedPreferences prefs = appContext.getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE);
int type = prefs.getInt(KEY_TYPE, -1);
if (type == 0) {
int resId = prefs.getInt(KEY_RES_ID, 0);
if (resId != 0) {
return initFromResource(appContext, resId);
}
} else if (type == 1) {
int color = prefs.getInt(KEY_COLOR, Color.BLACK);
return initFromColor(appContext, color);
}
return initFromColor(appContext, 0xFF00FF00);
}
}
public Drawable getDrawable() {
return drawable;
}
public DrawableType getDrawableType() {
return drawableType;
}
public int getResId() {
return resId;
}
public int getColor() {
return color;
}
public void saveToPreferences() {
if (context == null) return;
SharedPreferences prefs = context.getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = prefs.edit();
if (drawableType == DrawableType.RESOURCE_ID) {
editor.putInt(KEY_TYPE, 0);
editor.putInt(KEY_RES_ID, resId);
editor.remove(KEY_COLOR);
} else {
editor.putInt(KEY_TYPE, 1);
editor.putInt(KEY_COLOR, color);
editor.remove(KEY_RES_ID);
}
editor.apply();
}
public static void clearPreferences(Context context) {
SharedPreferences prefs = context.getApplicationContext().getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE);
prefs.edit().clear().apply();
}
}

View File

@@ -46,6 +46,15 @@
android:src="@drawable/ic_info"
android:background="?attr/selectableItemBackgroundBorderless"/>
<ImageView
android:id="@+id/btn_change_bg"
android:layout_width="40dp"
android:layout_height="40dp"
android:padding="5dp"
android:src="@drawable/ic_color_pick"
android:background="?attr/selectableItemBackgroundBorderless"
android:contentDescription="修改剪裁背景颜色"/>
<ImageView
android:id="@+id/btn_done"
android:layout_width="40dp"