Optimize image load

pull/21/head
FongMi 4 years ago
parent 3e5f2919f8
commit 5b458acb0a
  1. 2
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/HomeActivity.java
  2. 22
      app/src/leanback/java/com/fongmi/android/tv/ui/presenter/HistoryPresenter.java
  3. 6
      app/src/leanback/java/com/fongmi/android/tv/ui/presenter/VodPresenter.java
  4. 31
      app/src/main/java/com/fongmi/android/tv/utils/ImgUtil.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() {

@ -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);
});

@ -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

@ -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<Drawable> getListener(ImageView view) {
private static RequestListener<Drawable> getListener(String vodName, ImageView view) {
return new RequestListener<>() {
@Override
public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> 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);
}
}
}

Loading…
Cancel
Save