添加图片默认背景切换功能
- 工具栏添加背景切换按钮,点击弹出对话框 - 支持三种背景模式:灰白相间、全白、全黑 - 背景设置持久化保存,应用重启后保持原设置 - 切换背景时保持当前浏览的图片位置
This commit is contained in:
@@ -1,8 +1,8 @@
|
|||||||
#Created by .winboll/winboll_app_build.gradle
|
#Created by .winboll/winboll_app_build.gradle
|
||||||
#Sat Apr 25 19:16:31 CST 2026
|
#Sat Apr 25 19:42:01 CST 2026
|
||||||
stageCount=3
|
stageCount=3
|
||||||
libraryProject=
|
libraryProject=
|
||||||
baseVersion=15.0
|
baseVersion=15.0
|
||||||
publishVersion=15.0.2
|
publishVersion=15.0.2
|
||||||
buildCount=4
|
buildCount=8
|
||||||
baseBetaVersion=15.0.3
|
baseBetaVersion=15.0.3
|
||||||
|
|||||||
@@ -16,10 +16,25 @@ import cc.winboll.studio.libappbase.LogUtils;
|
|||||||
public class ImagePagerAdapter extends PagerAdapter {
|
public class ImagePagerAdapter extends PagerAdapter {
|
||||||
public static final String TAG = "ImagePagerAdapter";
|
public static final String TAG = "ImagePagerAdapter";
|
||||||
private ArrayList<Uri> imageUrls;
|
private ArrayList<Uri> imageUrls;
|
||||||
|
private int bgType;
|
||||||
|
|
||||||
public ImagePagerAdapter(ArrayList<Uri> imageUrls) {
|
public ImagePagerAdapter(ArrayList<Uri> imageUrls, int bgType) {
|
||||||
this.imageUrls = imageUrls;
|
this.imageUrls = imageUrls;
|
||||||
LogUtils.d(TAG, "ImagePagerAdapter created with " + imageUrls.size() + " images");
|
this.bgType = bgType;
|
||||||
|
LogUtils.d(TAG, "ImagePagerAdapter created with " + imageUrls.size() + " images, bgType=" + bgType);
|
||||||
|
}
|
||||||
|
|
||||||
|
private int getBgRes() {
|
||||||
|
switch (bgType) {
|
||||||
|
case 0:
|
||||||
|
return R.drawable.bg_checkerboard;
|
||||||
|
case 1:
|
||||||
|
return R.drawable.bg_white;
|
||||||
|
case 2:
|
||||||
|
return R.drawable.bg_black;
|
||||||
|
default:
|
||||||
|
return R.drawable.bg_checkerboard;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -32,6 +47,7 @@ public class ImagePagerAdapter extends PagerAdapter {
|
|||||||
public Object instantiateItem(@NonNull ViewGroup container, int position) {
|
public Object instantiateItem(@NonNull ViewGroup container, int position) {
|
||||||
View view = LayoutInflater.from(container.getContext())
|
View view = LayoutInflater.from(container.getContext())
|
||||||
.inflate(R.layout.item_image_pager, container, false);
|
.inflate(R.layout.item_image_pager, container, false);
|
||||||
|
view.setBackgroundResource(getBgRes());
|
||||||
ImageView imageView = view.findViewById(R.id.image);
|
ImageView imageView = view.findViewById(R.id.image);
|
||||||
|
|
||||||
Glide.with(imageView.getContext())
|
Glide.with(imageView.getContext())
|
||||||
|
|||||||
@@ -33,8 +33,11 @@ public class ImageViewerActivity extends Activity implements ViewPager.OnPageCha
|
|||||||
private ImageButton btnDelete;
|
private ImageButton btnDelete;
|
||||||
private ImageButton btnShare;
|
private ImageButton btnShare;
|
||||||
private ImageButton btnInfo;
|
private ImageButton btnInfo;
|
||||||
|
private ImageButton btnBg;
|
||||||
|
private int bgType = 0;
|
||||||
private GestureDetector gestureDetector;
|
private GestureDetector gestureDetector;
|
||||||
private TrashManager trashManager;
|
private TrashManager trashManager;
|
||||||
|
private Preferences prefs;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
@@ -49,6 +52,8 @@ public class ImageViewerActivity extends Activity implements ViewPager.OnPageCha
|
|||||||
currentPosition = getIntent().getIntExtra(EXTRA_POSITION, 0);
|
currentPosition = getIntent().getIntExtra(EXTRA_POSITION, 0);
|
||||||
|
|
||||||
trashManager = new TrashManager(this);
|
trashManager = new TrashManager(this);
|
||||||
|
prefs = new Preferences(this);
|
||||||
|
bgType = prefs.getBgType();
|
||||||
|
|
||||||
viewPager = findViewById(R.id.view_pager);
|
viewPager = findViewById(R.id.view_pager);
|
||||||
toolbar = findViewById(R.id.toolbar);
|
toolbar = findViewById(R.id.toolbar);
|
||||||
@@ -56,8 +61,11 @@ public class ImageViewerActivity extends Activity implements ViewPager.OnPageCha
|
|||||||
btnDelete = findViewById(R.id.btn_delete);
|
btnDelete = findViewById(R.id.btn_delete);
|
||||||
btnShare = findViewById(R.id.btn_share);
|
btnShare = findViewById(R.id.btn_share);
|
||||||
btnInfo = findViewById(R.id.btn_info);
|
btnInfo = findViewById(R.id.btn_info);
|
||||||
|
btnBg = findViewById(R.id.btn_bg);
|
||||||
|
|
||||||
ImagePagerAdapter adapter = new ImagePagerAdapter(imageUrls);
|
applyBg();
|
||||||
|
|
||||||
|
ImagePagerAdapter adapter = new ImagePagerAdapter(imageUrls, bgType);
|
||||||
viewPager.setAdapter(adapter);
|
viewPager.setAdapter(adapter);
|
||||||
viewPager.setCurrentItem(currentPosition);
|
viewPager.setCurrentItem(currentPosition);
|
||||||
viewPager.addOnPageChangeListener(this);
|
viewPager.addOnPageChangeListener(this);
|
||||||
@@ -104,6 +112,13 @@ public class ImageViewerActivity extends Activity implements ViewPager.OnPageCha
|
|||||||
showImageInfo();
|
showImageInfo();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
btnBg.setOnClickListener(new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
switchBg();
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private void toggleToolbar() {
|
private void toggleToolbar() {
|
||||||
@@ -114,6 +129,52 @@ public class ImageViewerActivity extends Activity implements ViewPager.OnPageCha
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void applyBg() {
|
||||||
|
int bgRes;
|
||||||
|
switch (bgType) {
|
||||||
|
case 0:
|
||||||
|
bgRes = R.drawable.bg_checkerboard;
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
bgRes = R.drawable.bg_white;
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
bgRes = R.drawable.bg_black;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
bgRes = R.drawable.bg_checkerboard;
|
||||||
|
}
|
||||||
|
View container = findViewById(R.id.container);
|
||||||
|
if (container != null) {
|
||||||
|
container.setBackgroundResource(bgRes);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void switchBg() {
|
||||||
|
final String[] bgNames = {"灰白相间", "全白", "全黑"};
|
||||||
|
final int[] bgResources = {R.drawable.bg_checkerboard, R.drawable.bg_white, R.drawable.bg_black};
|
||||||
|
|
||||||
|
new AlertDialog.Builder(this)
|
||||||
|
.setTitle("选择背景")
|
||||||
|
.setSingleChoiceItems(bgNames, bgType, new android.content.DialogInterface.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(android.content.DialogInterface dialog, int which) {
|
||||||
|
bgType = which;
|
||||||
|
prefs.setBgType(which);
|
||||||
|
int currentItem = viewPager.getCurrentItem();
|
||||||
|
View container = findViewById(R.id.container);
|
||||||
|
if (container != null) {
|
||||||
|
container.setBackgroundResource(bgResources[which]);
|
||||||
|
}
|
||||||
|
viewPager.setAdapter(new ImagePagerAdapter(imageUrls, bgType));
|
||||||
|
viewPager.setCurrentItem(currentItem);
|
||||||
|
dialog.dismiss();
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.setNegativeButton("取消", null)
|
||||||
|
.show();
|
||||||
|
}
|
||||||
|
|
||||||
private void showDeleteDialog() {
|
private void showDeleteDialog() {
|
||||||
new AlertDialog.Builder(this)
|
new AlertDialog.Builder(this)
|
||||||
.setMessage("Delete to trash?")
|
.setMessage("Delete to trash?")
|
||||||
@@ -178,7 +239,7 @@ public class ImageViewerActivity extends Activity implements ViewPager.OnPageCha
|
|||||||
if (currentPosition >= imageUrls.size()) {
|
if (currentPosition >= imageUrls.size()) {
|
||||||
currentPosition = imageUrls.size() - 1;
|
currentPosition = imageUrls.size() - 1;
|
||||||
}
|
}
|
||||||
viewPager.setAdapter(new ImagePagerAdapter(imageUrls));
|
viewPager.setAdapter(new ImagePagerAdapter(imageUrls, bgType));
|
||||||
viewPager.setCurrentItem(currentPosition);
|
viewPager.setCurrentItem(currentPosition);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,6 +8,8 @@ public class Preferences {
|
|||||||
public static final String TAG = "Preferences";
|
public static final String TAG = "Preferences";
|
||||||
private static final String PREF_NAME = "gallery_prefs";
|
private static final String PREF_NAME = "gallery_prefs";
|
||||||
private static final String KEY_FOLDER_PATH = "folder_path";
|
private static final String KEY_FOLDER_PATH = "folder_path";
|
||||||
|
private static final String KEY_BG_TYPE = "bg_type";
|
||||||
|
private static final int DEFAULT_BG_TYPE = 0;
|
||||||
private static final String DEFAULT_PATH = "/storage/emulated/0/Pictures/Gallery/owner";
|
private static final String DEFAULT_PATH = "/storage/emulated/0/Pictures/Gallery/owner";
|
||||||
|
|
||||||
public static String getDefaultPath() {
|
public static String getDefaultPath() {
|
||||||
@@ -30,4 +32,13 @@ public class Preferences {
|
|||||||
LogUtils.d(TAG, "setFolderPath: " + path);
|
LogUtils.d(TAG, "setFolderPath: " + path);
|
||||||
prefs.edit().putString(KEY_FOLDER_PATH, path).apply();
|
prefs.edit().putString(KEY_FOLDER_PATH, path).apply();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int getBgType() {
|
||||||
|
return prefs.getInt(KEY_BG_TYPE, DEFAULT_BG_TYPE);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBgType(int type) {
|
||||||
|
LogUtils.d(TAG, "setBgType: " + type);
|
||||||
|
prefs.edit().putInt(KEY_BG_TYPE, type).apply();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
5
gallery/src/main/res/drawable/bg_black.xml
Normal file
5
gallery/src/main/res/drawable/bg_black.xml
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:shape="rectangle">
|
||||||
|
<solid android:color="#000000"/>
|
||||||
|
</shape>
|
||||||
5
gallery/src/main/res/drawable/bg_white.xml
Normal file
5
gallery/src/main/res/drawable/bg_white.xml
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:shape="rectangle">
|
||||||
|
<solid android:color="#FFFFFF"/>
|
||||||
|
</shape>
|
||||||
12
gallery/src/main/res/drawable/ic_bg.xml
Normal file
12
gallery/src/main/res/drawable/ic_bg.xml
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:width="24dp"
|
||||||
|
android:height="24dp"
|
||||||
|
android:viewportWidth="24"
|
||||||
|
android:viewportHeight="24">
|
||||||
|
<path
|
||||||
|
android:fillColor="#FFFFFF"
|
||||||
|
android:pathData="M4,4h7v7h-7z M13,4h7v7h-7z M4,13h7v7h-7z M13,13h7v7h-7z"/>
|
||||||
|
<path
|
||||||
|
android:fillColor="#808080"
|
||||||
|
android:pathData="M11,4h2v7h-2z M4,11h7v2h-7z M13,11h7v2h-7z M11,13h2v7h-2z M13,4h2v7h-2z M4,13h7v2h-7z"/>
|
||||||
|
</vector>
|
||||||
@@ -52,6 +52,14 @@
|
|||||||
android:src="@drawable/ic_info"
|
android:src="@drawable/ic_info"
|
||||||
android:contentDescription="Info"/>
|
android:contentDescription="Info"/>
|
||||||
|
|
||||||
|
<ImageButton
|
||||||
|
android:id="@+id/btn_bg"
|
||||||
|
android:layout_width="48dp"
|
||||||
|
android:layout_height="48dp"
|
||||||
|
android:background="?attr/selectableItemBackgroundBorderless"
|
||||||
|
android:src="@drawable/ic_bg"
|
||||||
|
android:contentDescription="Background"/>
|
||||||
|
|
||||||
<ImageButton
|
<ImageButton
|
||||||
android:id="@+id/btn_delete"
|
android:id="@+id/btn_delete"
|
||||||
android:layout_width="48dp"
|
android:layout_width="48dp"
|
||||||
|
|||||||
@@ -2,8 +2,7 @@
|
|||||||
<FrameLayout
|
<FrameLayout
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent">
|
||||||
android:background="@drawable/bg_checkerboard">
|
|
||||||
|
|
||||||
<ImageView
|
<ImageView
|
||||||
android:id="@+id/image"
|
android:id="@+id/image"
|
||||||
|
|||||||
Reference in New Issue
Block a user