From 0649da7387a23da748db0bf1a77a2c91035bdb01 Mon Sep 17 00:00:00 2001 From: Spasol Date: Sat, 10 May 2025 14:57:41 +0800 Subject: [PATCH] =?UTF-8?q?1.=E4=B8=BB=E7=95=8C=E9=9D=A2=E8=83=8C=E6=99=AF?= =?UTF-8?q?=E5=9B=BE=E4=BF=AE=E5=A4=8D,=E5=BD=BB=E5=BA=95=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D=E4=BA=86=E6=9D=83=E9=99=90=E9=94=99=E8=AF=AF=E7=9A=84?= =?UTF-8?q?Bug=202.=E4=BC=98=E5=8C=96=E4=BA=86JMActivity=E5=8A=A0=E8=BD=BD?= =?UTF-8?q?=E9=80=9F=E5=BA=A6=E5=92=8C=E6=95=88=E7=8E=87=203.=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E4=BA=86=E5=9C=B0=E5=9B=BE=E4=B8=8A=E6=9C=BA=E5=8E=85?= =?UTF-8?q?=E4=BD=8D=E7=BD=AE=E4=BF=AE=E6=94=B9=E7=9A=84=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=204.=E5=A2=9E=E5=8A=A0=E4=BA=86=E6=9C=AC=E6=9C=AC=E6=94=B6?= =?UTF-8?q?=E8=97=8F=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/gradle.xml | 4 + .idea/migrations.xml | 10 ++ .idea/misc.xml | 3 +- .idea/runConfigurations.xml | 17 ++++ .../findmaimaiultra/adapter/PhotoAdapter.java | 97 +++++++++++-------- .../astral/findmaimaiultra/ui/JMActivity.java | 30 +++++- .../ui/pixiv/PixivFragment.java | 30 +++++- app/src/main/res/layout/fragment_pixiv.xml | 8 +- gradle/wrapper/gradle-wrapper.properties | 4 +- settings.gradle | 14 ++- 10 files changed, 169 insertions(+), 48 deletions(-) create mode 100644 .idea/migrations.xml create mode 100644 .idea/runConfigurations.xml diff --git a/.idea/gradle.xml b/.idea/gradle.xml index 4979975..f95a51d 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -4,14 +4,18 @@ + \ 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 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 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" /> - + + + +