fix HomeHots

main
jun 1 year ago
parent fbba0beb78
commit e1061ccf5a
  1. 4
      app/src/main/java/com/github/tvbox/osc/ui/activity/FastSearchActivity.java
  2. 20
      app/src/main/java/com/github/tvbox/osc/ui/adapter/GridAdapter.java
  3. 48
      app/src/main/java/com/github/tvbox/osc/ui/adapter/HomeHotVodAdapter.java
  4. 36
      app/src/main/java/com/github/tvbox/osc/ui/fragment/GridFragment.java
  5. 17
      app/src/main/java/com/github/tvbox/osc/ui/fragment/UserFragment.java
  6. 56
      app/src/main/java/com/github/tvbox/osc/util/ImgUtil.java

@ -177,7 +177,7 @@ public class FastSearchActivity extends BaseActivity {
});
mGridView.setHasFixedSize(true);
mGridView.setLayoutManager(new V7GridLayoutManager(this.mContext, 4));
mGridView.setLayoutManager(new V7GridLayoutManager(this.mContext, 5));
searchAdapter = new FastSearchAdapter();
mGridView.setAdapter(searchAdapter);
@ -206,7 +206,7 @@ public class FastSearchActivity extends BaseActivity {
});
mGridViewFilter.setLayoutManager(new V7GridLayoutManager(this.mContext, 4));
mGridViewFilter.setLayoutManager(new V7GridLayoutManager(this.mContext, 5));
searchAdapterFilter = new FastSearchAdapter();
mGridViewFilter.setAdapter(searchAdapterFilter);
searchAdapterFilter.setOnItemClickListener(new BaseQuickAdapter.OnItemClickListener() {

@ -26,32 +26,20 @@ import me.jessyan.autosize.utils.AutoSizeUtils;
*/
public class GridAdapter extends BaseQuickAdapter<Movie.Video, BaseViewHolder> {
private boolean mShowList ;
private int defaultWidth = 280;
private final Style style; // 动态风格,传入时调整图片宽高比
private int defaultWidth;
public ImgUtil.Style style; // 动态风格,传入时调整图片宽高比
/**
* style 数据结构ratio 指定宽高比 / type 表示风格例如 rectlist
*/
public static class Style {
public float ratio;
public String type;
public Style(float ratio, String type) {
this.ratio = ratio;
this.type = type;
}
}
/**
* 如果 style null则采用 item_grid.xml 中的默认尺寸
*/
public GridAdapter(boolean showList, Style style) {
public GridAdapter(boolean showList, ImgUtil.Style style) {
super( showList ? R.layout.item_list:R.layout.item_grid, new ArrayList<>());
this.mShowList = showList;
if(style!=null ){
if(style.type.equals("list"))this.mShowList=true;
if(style.ratio<1)this.defaultWidth=214;
if(style.ratio>1.7)this.defaultWidth=340;
this.defaultWidth=ImgUtil.getStyleDefaultWidth(style);
}
this.style = style;
}

@ -2,6 +2,7 @@ package com.github.tvbox.osc.ui.adapter;
import android.text.TextUtils;
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.TextView;
@ -25,9 +26,20 @@ import java.util.ArrayList;
import me.jessyan.autosize.utils.AutoSizeUtils;
public class HomeHotVodAdapter extends BaseQuickAdapter<Movie.Video, BaseViewHolder> {
private int defaultWidth;
private final ImgUtil.Style style;
private String tvRateValue;
public HomeHotVodAdapter() {
/**
* style 数据结构ratio 指定宽高比 / type 表示风格例如 rectlist
*/
public HomeHotVodAdapter(ImgUtil.Style style,String tvRate) {
super(R.layout.item_user_hot_vod, new ArrayList<>());
if(style!=null){
this.defaultWidth=ImgUtil.getStyleDefaultWidth(style);
}
this.style=style;
this.tvRateValue=tvRate;
}
@Override
@ -44,15 +56,12 @@ public class HomeHotVodAdapter extends BaseQuickAdapter<Movie.Video, BaseViewHol
if (Hawk.get(HawkConfig.HOME_REC, 0) == 2){
SourceBean bean = ApiConfig.get().getSource(item.sourceKey);
if(bean!=null){
tvRate.setText(bean.getName());
tvRateValue=bean.getName();
}else {
tvRate.setText("搜");
tvRateValue="搜";
}
}else if(Hawk.get(HawkConfig.HOME_REC, 0) == 0){
tvRate.setText("豆瓣热播");
}else {
tvRate.setVisibility(View.GONE);
}
tvRate.setText(tvRateValue);
TextView tvNote = helper.getView(R.id.tvNote);
if (item.note == null || item.note.isEmpty()) {
@ -63,6 +72,14 @@ public class HomeHotVodAdapter extends BaseQuickAdapter<Movie.Video, BaseViewHol
}
helper.setText(R.id.tvName, item.name);
ImageView ivThumb = helper.getView(R.id.ivThumb);
int newWidth = ImgUtil.defaultWidth;
int newHeight = ImgUtil.defaultHeight;
if(style!=null){
newWidth = defaultWidth;
newHeight = (int)(newWidth / style.ratio);
}
//由于部分电视机使用glide报错
if (!TextUtils.isEmpty(item.pic)) {
item.pic=item.pic.trim();
@ -74,7 +91,7 @@ public class HomeHotVodAdapter extends BaseQuickAdapter<Movie.Video, BaseViewHol
.load(DefaultConfig.checkReplaceProxy(item.pic))
.transform(new RoundTransformation(MD5.string2MD5(item.pic))
.centerCorp(true)
.override(AutoSizeUtils.mm2px(mContext, ImgUtil.defaultWidth), AutoSizeUtils.mm2px(mContext, ImgUtil.defaultHeight))
.override(AutoSizeUtils.mm2px(mContext, newWidth), AutoSizeUtils.mm2px(mContext, newHeight))
.roundRadius(AutoSizeUtils.mm2px(mContext, 10), RoundTransformation.RoundType.ALL))
.placeholder(R.drawable.img_loading_placeholder)
.noFade()
@ -84,5 +101,20 @@ public class HomeHotVodAdapter extends BaseQuickAdapter<Movie.Video, BaseViewHol
} else {
ivThumb.setImageDrawable(ImgUtil.createTextDrawable(item.name));
}
applyStyleToImage(ivThumb);//动态设置宽高
}
/**
* 根据传入的 style 动态设置 ImageView 的高度高度 = 宽度 / ratio
*/
private void applyStyleToImage(final ImageView ivThumb) {
if(style!=null){
ViewGroup container = (ViewGroup) ivThumb.getParent();
int width = defaultWidth;
int height = (int) (width / style.ratio);
ViewGroup.LayoutParams containerParams = container.getLayoutParams();
containerParams.height = AutoSizeUtils.mm2px(mContext, height); // 高度
containerParams.width = AutoSizeUtils.mm2px(mContext, width); // 宽度
container.setLayoutParams(containerParams);
}
}
}

@ -29,6 +29,7 @@ import com.github.tvbox.osc.ui.dialog.GridFilterDialog;
import com.github.tvbox.osc.ui.tv.widget.LoadMoreView;
import com.github.tvbox.osc.util.FastClickCheckUtil;
import com.github.tvbox.osc.util.HawkConfig;
import com.github.tvbox.osc.util.ImgUtil;
import com.github.tvbox.osc.util.LOG;
import com.github.tvbox.osc.viewmodel.SourceViewModel;
import com.orhanobut.hawk.Hawk;
@ -92,7 +93,6 @@ public class GridFragment extends BaseLazyFragment {
@Override
protected void init() {
bStyle=ApiConfig.get().getHomeSourceBean().getStyle();
initView();
initViewModel();
initData();
@ -148,7 +148,7 @@ public class GridFragment extends BaseLazyFragment {
return true;
}
private GridAdapter.Style style;
private ImgUtil.Style style;
// 更改当前页面
private void createView() {
this.saveCurrentView(); // 保存当前页面
@ -166,17 +166,7 @@ public class GridFragment extends BaseLazyFragment {
mGridView.setVisibility(View.VISIBLE);
}
mGridView.setHasFixedSize(true);
if(!bStyle.isEmpty()){
try {
JSONObject jsonObject = new JSONObject(bStyle);
float ratio = (float) jsonObject.getDouble("ratio");
String type = jsonObject.getString("type");
style = new GridAdapter.Style(ratio, type);
}catch (JSONException e){
}
}
style=ImgUtil.initStyle();
gridAdapter = new GridAdapter(isFolederMode(), style);
this.page =1;
this.maxPage =1;
@ -189,19 +179,15 @@ public class GridFragment extends BaseLazyFragment {
if(isFolederMode()){
mGridView.setLayoutManager(new V7LinearLayoutManager(this.mContext, 1, false));
}else{
int spanCount = isBaseOnWidth()?5:6;
if(!bStyle.isEmpty() && style!=null){
if ("rect".equals(style.type)) {
if (style.ratio >= 1.7) {
spanCount = 3; // 横图
} else if (style.ratio >= 1.3) {
spanCount = 4; // 4:3
}
} else if ("list".equals(style.type)) {
spanCount = 1;
}
int spanCount = isBaseOnWidth() ? 5 : 6;
if (style != null) {
spanCount = ImgUtil.spanCountByStyle(style, spanCount);
}
if (spanCount == 1) {
mGridView.setLayoutManager(new V7LinearLayoutManager(mContext, spanCount, false));
} else {
mGridView.setLayoutManager(new V7GridLayoutManager(mContext, spanCount));
}
mGridView.setLayoutManager(new V7GridLayoutManager(this.mContext, spanCount));
}
gridAdapter.setOnLoadMoreListener(new BaseQuickAdapter.RequestLoadMoreListener() {

@ -28,6 +28,7 @@ import com.github.tvbox.osc.ui.activity.SettingActivity;
import com.github.tvbox.osc.ui.adapter.HomeHotVodAdapter;
import com.github.tvbox.osc.util.FastClickCheckUtil;
import com.github.tvbox.osc.util.HawkConfig;
import com.github.tvbox.osc.util.ImgUtil;
import com.github.tvbox.osc.util.UA;
import com.google.gson.Gson;
import com.google.gson.JsonArray;
@ -84,7 +85,9 @@ public class UserFragment extends BaseLazyFragment implements View.OnClickListen
if (Hawk.get(HawkConfig.HOME_REC_STYLE, false)) {
tvHotList.setVisibility(View.VISIBLE);
tvHotList.setHasFixedSize(true);
tvHotList.setLayoutManager(new V7GridLayoutManager(this.mContext, 5));
int spanCount = 5;
if(style!=null && Hawk.get(HawkConfig.HOME_REC, 0) == 1)spanCount=ImgUtil.spanCountByStyle(style,spanCount);
tvHotList.setLayoutManager(new V7GridLayoutManager(this.mContext, spanCount));
int paddingLeft = getResources().getDimensionPixelSize(R.dimen.vs_15);
int paddingTop = getResources().getDimensionPixelSize(R.dimen.vs_10);
int paddingRight = getResources().getDimensionPixelSize(R.dimen.vs_15);
@ -132,6 +135,7 @@ public class UserFragment extends BaseLazyFragment implements View.OnClickListen
newIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
mActivity.startActivity(newIntent);
}
private ImgUtil.Style style;
@Override
protected void init() {
EventBus.getDefault().register(this);
@ -154,7 +158,16 @@ public class UserFragment extends BaseLazyFragment implements View.OnClickListen
tvPush.setOnFocusChangeListener(focusChangeListener);
tvCollect.setOnFocusChangeListener(focusChangeListener);
tvHotList = findViewById(R.id.tvHotList);
homeHotVodAdapter = new HomeHotVodAdapter();
if (Hawk.get(HawkConfig.HOME_REC, 0) == 1 && homeSourceRec!=null) {
style=ImgUtil.initStyle();
}
String tvRate="";
if(Hawk.get(HawkConfig.HOME_REC, 0) == 0){
tvRate="豆瓣热播";
}else if(Hawk.get(HawkConfig.HOME_REC, 0) == 1){
tvRate= homeSourceRec!=null?"站点推荐":"豆瓣热播";
}
homeHotVodAdapter = new HomeHotVodAdapter(style,tvRate);
homeHotVodAdapter.setOnItemClickListener(new BaseQuickAdapter.OnItemClickListener() {
@Override
public void onItemClick(BaseQuickAdapter adapter, View view, int position) {

@ -10,8 +10,12 @@ import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.util.Base64;
import com.github.tvbox.osc.api.ApiConfig;
import com.github.tvbox.osc.base.App;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;
@ -19,7 +23,7 @@ import java.util.Random;
import me.jessyan.autosize.utils.AutoSizeUtils;
/**
*base64图片
* 图片工具
* @version 1.0.0 <br/>
*/
public class ImgUtil {
@ -30,6 +34,56 @@ public class ImgUtil {
public static int defaultWidth = 244;
public static int defaultHeight = 320;
/**
* style 数据结构ratio 指定宽高比 / type 表示风格例如 rectlist
*/
public static class Style {
public float ratio;
public String type;
public Style(float ratio, String type) {
this.ratio = ratio;
this.type = type;
}
}
public static Style initStyle()
{
String bStyle = ApiConfig.get().getHomeSourceBean().getStyle();
if(!bStyle.isEmpty()){
try {
JSONObject jsonObject = new JSONObject(bStyle);
float ratio = (float) jsonObject.getDouble("ratio");
String type = jsonObject.getString("type");
return new Style(ratio, type);
}catch (JSONException e){
}
}
return null;
}
public static int spanCountByStyle(Style style,int defaultCount){
int spanCount=defaultCount;
if ("rect".equals(style.type)) {
if (style.ratio >= 1.7) {
spanCount = 3; // 横图
} else if (style.ratio >= 1.3) {
spanCount = 4; // 4:3
}
} else if ("list".equals(style.type)) {
spanCount = 1;
}
return spanCount;
}
public static int getStyleDefaultWidth(Style style){
int styleDefaultWidth = 280;
if(style.ratio<1)styleDefaultWidth=214;
if(style.ratio>1.7)styleDefaultWidth=380;
return styleDefaultWidth;
}
public static Bitmap decodeBase64ToBitmap(String base64Str) {
// 去掉 Base64 数据的头部前缀,例如 "data:image/png;base64,"
String base64Data = base64Str.substring(base64Str.indexOf(",") + 1);

Loading…
Cancel
Save