From 5b458acb0ae06af37abf3b4d09fa5a2697d14a59 Mon Sep 17 00:00:00 2001 From: FongMi Date: Thu, 4 Aug 2022 09:37:09 +0800 Subject: [PATCH] Optimize image load --- .../android/tv/ui/activity/HomeActivity.java | 2 +- .../tv/ui/presenter/HistoryPresenter.java | 22 +++++++------ .../android/tv/ui/presenter/VodPresenter.java | 6 ++-- .../com/fongmi/android/tv/utils/ImgUtil.java | 31 +++++++++++-------- 4 files changed, 35 insertions(+), 26 deletions(-) diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/HomeActivity.java b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/HomeActivity.java index aad8bbe5c..b23858faf 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/HomeActivity.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/HomeActivity.java @@ -101,7 +101,7 @@ public class HomeActivity extends BaseActivity implements VodPresenter.OnClickLi selector.addPresenter(ListRow.class, new CustomRowPresenter(16), HistoryPresenter.class); mBinding.recycler.setVerticalSpacing(ResUtil.dp2px(16)); mBinding.recycler.setAdapter(new ItemBridgeAdapter(mAdapter = new ArrayObjectAdapter(selector))); - mHistoryAdapter = new ArrayObjectAdapter(mHistoryPresenter = new HistoryPresenter(5)); + mHistoryAdapter = new ArrayObjectAdapter(mHistoryPresenter = new HistoryPresenter()); } private void setViewModel() { diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/presenter/HistoryPresenter.java b/app/src/leanback/java/com/fongmi/android/tv/ui/presenter/HistoryPresenter.java index d4a78b432..761219cf2 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/presenter/HistoryPresenter.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/presenter/HistoryPresenter.java @@ -20,8 +20,8 @@ public class HistoryPresenter extends Presenter { private int width, height; private boolean delete; - public HistoryPresenter(int columns) { - setLayoutSize(columns); + public HistoryPresenter() { + setLayoutSize(); } public interface OnClickListener { @@ -45,11 +45,11 @@ public class HistoryPresenter extends Presenter { this.delete = delete; } - private void setLayoutSize(int columns) { - int space = ResUtil.dp2px(16) * (columns - 1) + ResUtil.dp2px(48); + private void setLayoutSize() { + int space = ResUtil.dp2px(64) + ResUtil.dp2px(48); int base = ResUtil.getScreenWidthPx() - space; - width = (int) base / columns; - height = (int) (width / 0.75); + width = base / 5; + height = (int) (width / 0.75f); } @Override @@ -71,9 +71,13 @@ public class HistoryPresenter extends Presenter { holder.binding.site.setVisibility(delete ? View.GONE : View.VISIBLE); holder.binding.remark.setVisibility(delete ? View.GONE : View.VISIBLE); holder.binding.delete.setVisibility(!delete ? View.GONE : View.VISIBLE); - ImgUtil.load(item.getVodName(), item.getVodPic(), holder.binding.image); - holder.view.setOnLongClickListener(view -> mListener.onLongClick()); - holder.view.setOnClickListener(view -> { + ImgUtil.load(item.getVodPic(), holder.binding.image); + setClickListener(holder.view, item); + } + + private void setClickListener(View root, History item) { + root.setOnLongClickListener(view -> mListener.onLongClick()); + root.setOnClickListener(view -> { if (isDelete()) mListener.onItemDelete(item); else mListener.onItemClick(item); }); diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/presenter/VodPresenter.java b/app/src/leanback/java/com/fongmi/android/tv/ui/presenter/VodPresenter.java index 2395c086f..d28a7986c 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/presenter/VodPresenter.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/presenter/VodPresenter.java @@ -26,10 +26,10 @@ public class VodPresenter extends Presenter { } private void setLayoutSize(int columns) { - int space = ResUtil.dp2px(16) * (columns - 1) + ResUtil.dp2px(48); + int space = ResUtil.dp2px(16 * columns - 1) + ResUtil.dp2px(48); int base = ResUtil.getScreenWidthPx() - space; - width = (int) base / columns; - height = (int) (width / 0.75); + width = base / columns; + height = (int) (width / 0.75f); } @Override diff --git a/app/src/main/java/com/fongmi/android/tv/utils/ImgUtil.java b/app/src/main/java/com/fongmi/android/tv/utils/ImgUtil.java index b8acbc311..c53ada98c 100644 --- a/app/src/main/java/com/fongmi/android/tv/utils/ImgUtil.java +++ b/app/src/main/java/com/fongmi/android/tv/utils/ImgUtil.java @@ -1,7 +1,6 @@ package com.fongmi.android.tv.utils; import android.graphics.drawable.Drawable; -import android.text.TextUtils; import android.widget.ImageView; import androidx.annotation.Nullable; @@ -19,26 +18,21 @@ import com.fongmi.android.tv.R; public class ImgUtil { - public static void load(String vodName, String vodPic, ImageView view) { - if (TextUtils.isEmpty(vodPic)) { - String text = vodName.isEmpty() ? "" : vodName.substring(0, 1); - view.setImageDrawable(TextDrawable.builder().buildRect(text, ColorGenerator.MATERIAL.getColor(text))); - } else { - load(vodPic, view); - } + public static void load(String url, ImageView view) { + Glide.with(App.get()).load(url).error(R.drawable.ic_img_error).placeholder(R.drawable.ic_img_loading).into(view); } - public static void load(String url, ImageView view) { + public static void load(String vodName, String vodPic, ImageView view) { float thumbnail = 1 - Prefers.getThumbnail() * 0.3f; - Glide.with(App.get()).load(url).thumbnail(thumbnail).signature(new ObjectKey(url + "_" + thumbnail)).placeholder(R.drawable.ic_img_loading).error(R.drawable.ic_img_error).listener(getListener(view)).into(view); + Glide.with(App.get()).load(vodPic).sizeMultiplier(thumbnail).signature(new ObjectKey(vodPic + "_" + thumbnail)).placeholder(R.drawable.ic_img_loading).listener(getListener(vodName, view)).into(view); } - private static RequestListener getListener(ImageView view) { + private static RequestListener getListener(String vodName, ImageView view) { return new RequestListener<>() { @Override public boolean onLoadFailed(@Nullable GlideException e, Object model, Target target, boolean isFirstResource) { - view.setScaleType(ImageView.ScaleType.CENTER); - return false; + ImgUtil.onLoadFailed(vodName, view); + return true; } @Override @@ -48,4 +42,15 @@ public class ImgUtil { } }; } + + private static void onLoadFailed(String vodName, ImageView view) { + String text = vodName.isEmpty() ? "" : vodName.substring(0, 1); + if (text.isEmpty()) { + view.setImageResource(R.drawable.ic_img_error); + view.setScaleType(ImageView.ScaleType.CENTER); + } else { + view.setImageDrawable(TextDrawable.builder().buildRect(text, ColorGenerator.MATERIAL.getColor(text))); + view.setScaleType(ImageView.ScaleType.CENTER_CROP); + } + } }