\ No newline at end of file
diff --git a/.idea/migrations.xml b/.idea/migrations.xml
new file mode 100644
index 0000000..f8051a6
--- /dev/null
+++ b/.idea/migrations.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
index 097137d..e483b6f 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -1,9 +1,10 @@
+
-
+
diff --git a/.idea/runConfigurations.xml b/.idea/runConfigurations.xml
new file mode 100644
index 0000000..16660f1
--- /dev/null
+++ b/.idea/runConfigurations.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/java/org/astral/findmaimaiultra/adapter/PhotoAdapter.java b/app/src/main/java/org/astral/findmaimaiultra/adapter/PhotoAdapter.java
index dad8897..f27755b 100644
--- a/app/src/main/java/org/astral/findmaimaiultra/adapter/PhotoAdapter.java
+++ b/app/src/main/java/org/astral/findmaimaiultra/adapter/PhotoAdapter.java
@@ -4,6 +4,7 @@ import android.annotation.SuppressLint;
import android.content.ContentValues;
import android.content.Context;
import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
@@ -11,6 +12,7 @@ import android.net.Uri;
import android.os.Environment;
import android.provider.MediaStore;
import android.util.Log;
+import android.util.SparseArray;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -39,6 +41,7 @@ public class PhotoAdapter extends RecyclerView.Adapter imageUrls;
private List nums;
private static List loading = new ArrayList<>();
+ private SparseArray bitmapCache = new SparseArray<>();
public void clearLoad() {
loading.clear();
@@ -51,9 +54,22 @@ public class PhotoAdapter extends RecyclerView.Adapter {
+ saveImageToMediaStore(cachedBitmap, fileName);
+ return true;
+ });
+ return;
+ }
+
+ // 然后检查磁盘缓存
if (cacheFile.exists()) {
- Log.d("HHHHHHHHHH", "Loading cached image at position: " + position);
- // 加载缓存的图片并压缩到屏幕大小
- Glide.with(context)
- .asBitmap()
- .load(cacheFile)
- .override(holder.itemView.getWidth(), holder.itemView.getHeight()) // 压缩图片到屏幕大小
- .into(new CustomTarget() {
- @Override
- public void onResourceReady(@NonNull Bitmap resource, Transition super Bitmap> transition) {
- Log.d("PhotoAdapter", "Image loaded successfully at position: " + position);
- if (!loading.contains(position)) {
- loading.add(position);
- }
- holder.imageView.setImageBitmap(resource);
- holder.imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
+ Log.d("PhotoAdapter", "Loading cached image at position: " + position);
+ Bitmap bitmap = BitmapFactory.decodeFile(cacheFile.getAbsolutePath());
+ if (bitmap != null) {
+ bitmapCache.put(position, bitmap);
+ holder.imageView.setImageBitmap(bitmap);
+ holder.imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
- // 设置长按监听器
- holder.imageView.setOnLongClickListener(v -> {
- saveImageToMediaStore(resource, fileName);
- return true;
- });
- }
-
- @Override
- public void onLoadCleared(Drawable placeholder) {
- Log.d("PhotoAdapter", "Image load cleared at position: " + position);
- }
-
- @Override
- public void onLoadFailed(Drawable errorDrawable) {
- super.onLoadFailed(errorDrawable);
- Log.e("PhotoAdapter", "Image load failed at position: " + position);
- }
- });
+ holder.imageView.setOnLongClickListener(v -> {
+ saveImageToMediaStore(bitmap, fileName);
+ return true;
+ });
+ } else {
+ //holder.imageView.setImageResource(R.drawable.loading);
+ }
} else {
- ImageView imageView = holder.imageView;
- imageView = new ImageView(context);
- imageView.setImageDrawable(ContextCompat.getDrawable(context, R.drawable.loading));
- imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
-
+ //holder.imageView.setImageResource(R.drawable.loading);
}
}
+
@Override
public int getItemCount() {
return imageUrls.size();
@@ -220,6 +227,15 @@ public class PhotoAdapter extends RecyclerView.Adapter bottomSheetBehavior;
+ private SharedPreferences sharedPreferences;
private PhotoAdapter photoAdapter;
private static final int REQUEST_CODE_WRITE_EXTERNAL_STORAGE = 1;
private Album album;
@@ -56,7 +60,7 @@ public class JMActivity extends AppCompatActivity {
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.jm_dialog);
-
+ sharedPreferences = getSharedPreferences("shoucang_benzi", MODE_PRIVATE);
initRecyclerView();
}
private void initRecyclerView() {
@@ -76,6 +80,28 @@ public class JMActivity extends AppCompatActivity {
MaterialButton downloadButton = findViewById(R.id.download);
downloadButton.setOnClickListener(v -> downloadAllImages());
+ SwitchMaterial switchMaterial = findViewById(R.id.shoucang);
+
+ //触发器
+ switchMaterial.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
+ @Override
+ public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
+ if (isChecked) {
+ // 触发器被选中时执行的操作
+ // 在这里添加你的操作代码
+ Toast.makeText(JMActivity.this, "已收藏", Toast.LENGTH_SHORT).show();
+ SharedPreferences.Editor editor = sharedPreferences.edit();
+ String shoucang = sharedPreferences.getString("benzi","[]");
+ List list = new Gson().fromJson(shoucang, List.class);
+
+ list.add(a.getAlbum_id() + "_" + a.getName());
+ editor.putString("benzi", new Gson().toJson(list));
+ editor.apply();
+ } else {
+ // 触发器未被选中时执行的操作
+ }
+ }
+ });
bottomSheetBehavior = BottomSheetBehavior.from(findViewById(R.id.bottom_sheet));
bottomSheetBehavior.setPeekHeight(dpToPx(80));
@@ -157,6 +183,7 @@ public class JMActivity extends AppCompatActivity {
Glide.with(this)
.asBitmap()
.load(imageUrl)
+ .override(1080, 1920) // 设置最大宽高
.into(new CustomTarget() {
@Override
public void onResourceReady(@NonNull Bitmap resource, Transition super Bitmap> transition) {
@@ -251,6 +278,7 @@ public class JMActivity extends AppCompatActivity {
super.onDestroy();
if (photoAdapter != null) {
photoAdapter.clearCache();
+ photoAdapter = null;
}
}
private void saveBitmapToFile(Bitmap bitmap, File file) {
diff --git a/app/src/main/java/org/astral/findmaimaiultra/ui/pixiv/PixivFragment.java b/app/src/main/java/org/astral/findmaimaiultra/ui/pixiv/PixivFragment.java
index 1bd71bc..4099212 100644
--- a/app/src/main/java/org/astral/findmaimaiultra/ui/pixiv/PixivFragment.java
+++ b/app/src/main/java/org/astral/findmaimaiultra/ui/pixiv/PixivFragment.java
@@ -78,6 +78,10 @@ public class PixivFragment extends Fragment {
private FragmentPixivBinding binding;
private SharedViewModel sharedViewModel;
private PixivAdapter adapter;
+ private ListView shoucangList;
+ // 声明适配器
+ private ArrayAdapter shoucangListAdapter;
+ private List shoucangDataList = new ArrayList<>();
@Override
public void onCreate(Bundle savedInstanceState) {
@@ -89,11 +93,12 @@ public class PixivFragment extends Fragment {
if (context != null) {
shoucang = context.getSharedPreferences("shoucang_prefs", Context.MODE_PRIVATE);
settingProperties = context.getSharedPreferences("setting_prefs", Context.MODE_PRIVATE);
- settingProperties2 = context.getSharedPreferences("setting", Context.MODE_PRIVATE);
+ settingProperties2 = context.getSharedPreferences("shoucang_benzi", Context.MODE_PRIVATE);
}
sharedViewModel = new ViewModelProvider(requireActivity()).get(SharedViewModel.class);
}
+ @SuppressLint("SetTextI18n")
@Override
public View onCreateView(@NonNull LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState) {
@@ -106,7 +111,7 @@ public class PixivFragment extends Fragment {
path1 = binding.path1;
path2 = binding.path2;
searchView = binding.searchView;
-
+ shoucangList = binding.shoucang;
requireActivity().getOnBackPressedDispatcher().addCallback(getViewLifecycleOwner(), new OnBackPressedCallback(true) {
@Override
public void handleOnBackPressed() {
@@ -132,6 +137,27 @@ public class PixivFragment extends Fragment {
recyclerView.setLayoutManager(new LinearLayoutManager(requireContext()));
recyclerView.setAdapter(adapter);
// 设置搜索框的查询监听器
+ String dat = settingProperties2.getString("benzi", "[]");
+ List list = new Gson().fromJson(dat, List.class);
+// 替换原有的 for 循环代码
+ shoucangListAdapter = new ArrayAdapter<>(requireContext(), android.R.layout.simple_list_item_1, shoucangDataList);
+ shoucangList.setAdapter(shoucangListAdapter);
+
+ for (String s : list) {
+ String id = s.split("_")[0];
+ String name = s.split("_")[1];
+ if (name.length() > 14) {
+ name = name.substring(0, 14);
+ }
+ shoucangDataList.add("[" + id + "] " + name + "...\n");
+ //加个换行横线
+ }
+ shoucangListAdapter.notifyDataSetChanged();
+ shoucangList.setOnItemClickListener((parent, view, position, id) -> {
+ String selectedItem = shoucangDataList.get(position);
+ String idValue = selectedItem.split("]")[0].replace("[", "");
+ fetchDataJM(idValue, 0, null);
+ });
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
diff --git a/app/src/main/res/layout/fragment_pixiv.xml b/app/src/main/res/layout/fragment_pixiv.xml
index 8f2c51e..aec1a04 100644
--- a/app/src/main/res/layout/fragment_pixiv.xml
+++ b/app/src/main/res/layout/fragment_pixiv.xml
@@ -62,8 +62,14 @@
android:text="FindMaimai Engine"
android:textSize="18sp"
android:layout_marginTop="8dp" />
-
+
+
+
+