package com.tejia.lijin.app.ui.trends;
|
|
import android.app.Activity;
|
import android.content.Context;
|
import android.content.Intent;
|
import android.graphics.Color;
|
import android.graphics.Rect;
|
import android.graphics.drawable.Drawable;
|
import android.text.Html;
|
import android.text.Layout;
|
import android.text.method.LinkMovementMethod;
|
import android.view.LayoutInflater;
|
import android.view.View;
|
import android.view.ViewGroup;
|
import android.widget.ImageView;
|
import android.widget.LinearLayout;
|
import android.widget.TextView;
|
|
import com.ali.auth.third.core.util.StringUtil;
|
import com.bumptech.glide.Glide;
|
import com.bumptech.glide.load.engine.DiskCacheStrategy;
|
import com.bumptech.glide.request.RequestOptions;
|
import com.google.gson.Gson;
|
import com.nostra13.universalimageloader.core.DisplayImageOptions;
|
import com.nostra13.universalimageloader.core.ImageLoader;
|
import com.nostra13.universalimageloader.core.assist.ImageScaleType;
|
import com.nostra13.universalimageloader.core.display.RoundedBitmapDisplayer;
|
import com.tejia.lijin.app.R;
|
import com.tejia.lijin.app.entity.HomeBanner;
|
import com.tejia.lijin.app.entity.Label;
|
import com.tejia.lijin.app.entity.TaoBaoGoodsBrief;
|
import com.tejia.lijin.app.entity.common.ImageShowEntity;
|
import com.tejia.lijin.app.entity.trends.SendCircleCommment;
|
import com.tejia.lijin.app.entity.trends.SendCircleContent;
|
import com.tejia.lijin.app.entity.trends.SendCircleImage;
|
import com.tejia.lijin.app.entity.trends.SendCircleImageGoods;
|
import com.tejia.lijin.app.entity.trends.SendCircleUser;
|
import com.tejia.lijin.app.ui.invite.ShareBrowserActivity;
|
import com.tejia.lijin.app.ui.recommend.GoodsDetailActivity;
|
import com.tejia.lijin.app.ui.recommend.RecommendTopAdapter2;
|
import com.tejia.lijin.app.util.SetLabels;
|
import com.tejia.lijin.app.util.downutil.StringUtils;
|
import com.tejia.lijin.app.util.goods.GoodsDetailListUtil;
|
import com.tejia.lijin.app.util.ui.GoodsRightViewHolder;
|
import com.tejia.lijin.app.util.ui.TextViewUtil;
|
import com.tejia.lijin.app.util.user.UserUtil;
|
import com.viewpagerindicator.CirclePageIndicator;
|
import com.wpc.library.util.SystemCommon;
|
import com.wpc.library.util.common.DimenUtils;
|
import com.wpc.library.widget.RatioLayout;
|
|
import java.util.ArrayList;
|
import java.util.List;
|
|
import androidx.annotation.NonNull;
|
import androidx.recyclerview.widget.GridLayoutManager;
|
import androidx.recyclerview.widget.RecyclerView;
|
import androidx.viewpager.widget.ViewPager;
|
|
/**
|
* 发圈adapter
|
*/
|
public class SendCircleAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
|
|
private static final String TAG = "SendCircleAdapter";
|
private List<HomeBanner> mBannerList;
|
private List<SendCircleContent> mContentList;
|
private Activity mContext;
|
private LayoutInflater inflater = null;
|
private AdapterEventActionListener adapterEventActionListener;
|
private final int TYPE_FOOTER = -1;
|
private final int TYPE_BANNER = 1;
|
private final int TYPE_CIRCLE_CONTENT = 2;
|
private Integer maxImgHeight = null;
|
|
private DisplayImageOptions options;
|
|
|
public SendCircleAdapter(Activity activity, List<HomeBanner> mBannerList, List<SendCircleContent> mContentList, AdapterEventActionListener actionListener) {
|
this.mContext = activity;
|
this.mBannerList = mBannerList;
|
this.mContentList = mContentList;
|
inflater = LayoutInflater.from(mContext);
|
this.adapterEventActionListener = actionListener;
|
this.options = new DisplayImageOptions.Builder()
|
.showImageForEmptyUri(R.drawable.ic_goods_default)
|
.showImageOnFail(R.drawable.ic_goods_default)
|
.showImageOnLoading(R.drawable.ic_goods_default)
|
.resetViewBeforeLoading(true).cacheInMemory(true)
|
.cacheOnDisk(true).imageScaleType(ImageScaleType.EXACTLY)
|
.considerExifParams(true)
|
.displayer(new RoundedBitmapDisplayer(DimenUtils.dip2px(mContext, 5))).build();
|
}
|
|
@NonNull
|
@Override
|
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
switch (viewType) {
|
case TYPE_BANNER:
|
View bannerView = inflater.inflate(R.layout.item_college_banner, parent, false);
|
return new BannerHolder(bannerView);
|
case TYPE_CIRCLE_CONTENT:
|
View articleView = inflater.inflate(R.layout.item_send_circle_content, parent, false);
|
return new CircleContentHolder(articleView, new RecyclerView.RecycledViewPool());
|
case TYPE_FOOTER:
|
return new CommonHolder(footerView);
|
}
|
return null;
|
}
|
|
|
@Override
|
public int getItemViewType(int position) {
|
int base = 0;
|
if (mBannerList != null && mBannerList.size() > 0)
|
base += 1;
|
if (base > 0 && position == 0)
|
return TYPE_BANNER;
|
else if (position < mContentList.size() + base)
|
return TYPE_CIRCLE_CONTENT;
|
else if (position == mContentList.size() + base)
|
return TYPE_FOOTER;
|
return 0;
|
}
|
|
private void imageClickAction(List<SendCircleImage> imageList, SendCircleContent content, int position) {
|
if (imageList.get(position) == null)
|
return;
|
SendCircleImage image = imageList.get(position);
|
if (image.getType() == 3 && !StringUtils.isNullOrEmpty(image.getVideoUrl())) {//视频
|
mContext.startActivity(new Intent(mContext, VideoPlayActivity.class).putExtra("url", image.getVideoUrl()));
|
} else if (imageList.get(position).getGoods() != null) {//商品
|
if (imageList.get(position).getGoods() == null || imageList.get(position).getGoods().getState() == 1) {
|
return;
|
}
|
int rposition = position;
|
for (int i = 0; i < imageList.size(); i++) {
|
if (position > i && (imageList.get(i) == null || imageList.get(i).getType() == 3))
|
rposition--;
|
}
|
if (content.getGoods() != null)//单品
|
adapterEventActionListener.createERCode(content, imageList, imageList.get(position), rposition);
|
else {//多品
|
SendCircleImageGoods imageGoods = imageList.get(position).getGoods();
|
int goodsType = imageGoods.getGoodsType();
|
//跳转商品详情
|
Intent intent = new Intent(mContext, GoodsDetailActivity.class);
|
intent.putExtra("goodsId", imageGoods.getGoodsId());
|
intent.putExtra("goodsType", goodsType);
|
intent.putExtra("from", "faquan");
|
mContext.startActivity(intent);
|
}
|
} else if (imageList.get(position).getType() == 4 && !StringUtils.isNullOrEmpty(imageList.get(position).getActivityUrl())) {
|
mContext.startActivity(new Intent(mContext, ShareBrowserActivity.class).putExtra("url", imageList.get(position).getActivityUrl()));
|
} else {//纯图片
|
List<ImageShowEntity> imageEntityList = new ArrayList<>();
|
int rposition = position;
|
for (int i = 0; i < imageList.size(); i++) {
|
if (position > i && (imageList.get(i) == null || imageList.get(i).getType() == 3))
|
rposition--;
|
if (imageList.get(i) != null && imageList.get(i).getType() != 3)
|
imageEntityList.add(new ImageShowEntity(null, StringUtils.isNullOrEmpty(imageList.get(i).getUrlHD()) ? imageList.get(i).getUrl() : imageList.get(i).getUrlHD()));
|
}
|
mContext.startActivity(new Intent(mContext, BigImageActivity.class).putExtra("imgList", new Gson().toJson(imageEntityList)).putExtra("position", rposition));
|
}
|
}
|
|
private Integer maxImgWidth = null;
|
|
@Override
|
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
|
if (position >= mContentList.size())
|
return;
|
if (holder instanceof BannerHolder) {//Banner
|
BannerHolder bannerHolder = (BannerHolder) holder;
|
bannerHolder.vp_college.setAdapter(new RecommendTopAdapter2(mBannerList, mContext, false));
|
bannerHolder.indicator.setViewPager(bannerHolder.vp_college);
|
} else if (holder instanceof CircleContentHolder) {
|
final CircleContentHolder circleContentHolder = (CircleContentHolder) holder;
|
if (maxImgWidth == null) {
|
int miw = 0;//circleContentHolder.iv_portrait.getLayoutParams().width;
|
ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) circleContentHolder.ll_content.getLayoutParams();
|
miw += params.leftMargin + params.rightMargin;
|
miw += circleContentHolder.ll_content.getPaddingLeft() + circleContentHolder.ll_content.getPaddingRight();
|
miw += circleContentHolder.view.getPaddingLeft() + circleContentHolder.view.getPaddingRight();
|
maxImgWidth = (int) SystemCommon.getScreenWidth(mContext) - miw;
|
}
|
|
int cposition = position;
|
if (mBannerList != null && mBannerList.size() > 0)
|
cposition--;
|
final SendCircleContent circleContent = mContentList.get(cposition);
|
//用户信息赋值
|
if (circleContent.getUser() != null) {
|
SendCircleUser user = circleContent.getUser();
|
ImageLoader.getInstance().displayImage(user.getPortrait(), circleContentHolder.iv_portrait, options);
|
circleContentHolder.tv_nickname.setText(user.getNickName());
|
if (!StringUtils.isNullOrEmpty(user.getTag())) {
|
List<Label> labels = new ArrayList<>();
|
labels.add(new Label("#E5005C", user.getTag()));
|
circleContentHolder.ll_labels.removeAllViews();
|
SetLabels.addLabel(mContext, circleContentHolder.ll_labels, labels);
|
} else {
|
circleContentHolder.ll_labels.removeAllViews();
|
}
|
}
|
|
if (circleContent.getComments() != null && circleContent.getComments().size() > 0)
|
circleContentHolder.ll_copy_comment.setVisibility(View.VISIBLE);
|
else
|
circleContentHolder.ll_copy_comment.setVisibility(View.GONE);
|
//日期赋值
|
circleContentHolder.tv_publish_time.setText(circleContent.getPublishTime());
|
|
//分享数赋值
|
circleContentHolder.tv_share_count.setText(circleContent.getShareNum());
|
|
//分享
|
circleContentHolder.ll_share.setOnClickListener(new View.OnClickListener() {
|
@Override
|
public void onClick(View v) {
|
adapterEventActionListener.share(circleContent);
|
}
|
});
|
|
//保存图片
|
circleContentHolder.ll_save_picture.setOnClickListener(new View.OnClickListener() {
|
@Override
|
public void onClick(View v) {
|
adapterEventActionListener.saveImgs(circleContent);
|
}
|
});
|
|
//复制品论
|
circleContentHolder.ll_copy_comment.setOnClickListener(new View.OnClickListener() {
|
@Override
|
public void onClick(View v) {
|
if (circleContent.getComments() != null && circleContent.getComments().size() > 0)
|
adapterEventActionListener.copyComment(circleContent, circleContent.getComments().get(0));
|
}
|
});
|
|
circleContentHolder.tv_recommend.setMaxLines(6);
|
//推荐语赋值
|
circleContentHolder.tv_recommend.setText(circleContent.getTitle());
|
|
circleContentHolder.tv_recommend.post(new Runnable() {
|
@Override
|
public void run() {
|
Layout l = circleContentHolder.tv_recommend.getLayout();
|
if (l != null) {
|
int lines = l.getLineCount();
|
if (lines > 0) {
|
if (l.getEllipsisCount(lines - 1) > 0) {
|
circleContentHolder.iv_recommend_more.setVisibility(View.VISIBLE);
|
} else {
|
circleContentHolder.iv_recommend_more.setVisibility(View.GONE);
|
}
|
}
|
}
|
}
|
});
|
|
circleContentHolder.iv_recommend_more.setOnClickListener(new View.OnClickListener() {
|
@Override
|
public void onClick(View v) {
|
//显示TextView的全部内容其实就是取消这类隐藏文字的属性
|
circleContentHolder.tv_recommend.setMaxLines(200);
|
circleContentHolder.iv_recommend_more.setVisibility(View.GONE);
|
}
|
});
|
|
|
circleContentHolder.ll_copy_recommend.setOnClickListener(new View.OnClickListener() {
|
@Override
|
public void onClick(View v) {
|
adapterEventActionListener.copyRecommendText(circleContent);
|
}
|
});
|
|
final int goodsCount = circleContent.getGoods() != null ? 1 : 0;
|
final int commentCount = circleContent.getComments() != null ? circleContent.getComments().size() : 0;
|
|
List<SendCircleImage> largeImageList = new ArrayList<>();
|
List<SendCircleImage> smallImageList = new ArrayList<>();
|
int invalidImgCount = 0;
|
if (circleContent.getImgList() != null)
|
for (SendCircleImage img : circleContent.getImgList()) {
|
if (img == null) {
|
invalidImgCount++;
|
continue;
|
}
|
if (img.isLarge())
|
largeImageList.add(img);
|
else
|
smallImageList.add(img);
|
}
|
|
final int largeImageCount = largeImageList.size();
|
final int smallImageCount = smallImageList.size();
|
final int invalidImageCount = invalidImgCount;
|
|
|
if (circleContentHolder.rv_content.getLayoutManager() == null || !(circleContentHolder.rv_content.getLayoutManager() instanceof GridLayoutManager)) {
|
GridLayoutManager layoutManager = new GridLayoutManager(mContext, 6);
|
circleContentHolder.rv_content.setLayoutManager(layoutManager);
|
}
|
|
((GridLayoutManager) circleContentHolder.rv_content.getLayoutManager()).setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
|
@Override
|
public int getSpanSize(int position) {
|
if (position < largeImageCount) {
|
return 6;
|
} else if (position < largeImageCount + smallImageCount + invalidImageCount) {
|
return 2;
|
} else if (position < largeImageCount + smallImageCount + invalidImageCount + goodsCount) {
|
return 6;
|
} else if (position < largeImageCount + smallImageCount + invalidImageCount + goodsCount + commentCount) {
|
return 6;
|
}
|
return 6;
|
}
|
});
|
|
|
if (circleContentHolder.rv_content.getItemDecorationCount() == 0) {
|
circleContentHolder.rv_content.addItemDecoration(new SpaceItemDecoration(largeImageCount, smallImageCount + invalidImageCount, goodsCount, commentCount, circleContent.getLineNum(), DimenUtils.dip2px(mContext, 1)));
|
} else {
|
SpaceItemDecoration spaceItemDecoration = (SpaceItemDecoration) circleContentHolder.rv_content.getItemDecorationAt(0);
|
spaceItemDecoration.initData(largeImageCount, smallImageCount + invalidImageCount, goodsCount, commentCount, circleContent.getLineNum(), DimenUtils.dip2px(mContext, 1));
|
}
|
|
if (maxImgHeight == null) {
|
maxImgHeight = (int) SystemCommon.getScreenWidth(mContext) * 358 / 375;
|
}
|
|
circleContentHolder.rv_content.setAdapter(new SendCircleContentAdapter(mContext, circleContent, maxImgHeight, maxImgWidth, new CommentClickListener() {
|
@Override
|
public void onTagClick(int position) {
|
|
}
|
|
@Override
|
public void onCopyClick(int position) {
|
Long uid = UserUtil.getUid(mContext);
|
if (uid == null || uid == 0L) {
|
UserUtil.jumpLogin(mContext);
|
return;
|
}
|
|
adapterEventActionListener.copyComment(circleContent, circleContent.getComments().get(position));
|
}
|
}, new ImgClickListener() {
|
@Override
|
public void onClick(int position) {
|
imageClickAction(circleContent.getImgList(), circleContent, position);
|
}
|
}, cposition));
|
|
|
}
|
|
|
}
|
|
@Override
|
public int getItemCount() {
|
int count = mContentList.size();
|
if (mBannerList != null && mBannerList.size() > 0)
|
count++;
|
if (footerView != null)
|
count++;
|
|
return count;
|
}
|
|
|
/**
|
* Banner
|
*/
|
public class BannerHolder extends RecyclerView.ViewHolder {
|
private ViewPager vp_college;
|
private CirclePageIndicator indicator;
|
|
public BannerHolder(View view) {
|
super(view);
|
vp_college = view.findViewById(R.id.vp_college);
|
indicator = view.findViewById(R.id.indicator_college);
|
}
|
}
|
|
|
/**
|
* 发圈内容
|
*/
|
public class CircleContentHolder extends RecyclerView.ViewHolder {
|
|
private View view;
|
//发布者信息
|
private ImageView iv_portrait, iv_recommend_more;
|
private TextView tv_nickname;
|
private LinearLayout ll_labels, ll_content;
|
//发布时间
|
private TextView tv_publish_time;
|
|
//保存图片按钮
|
private LinearLayout ll_save_picture;
|
//分享按钮
|
private LinearLayout ll_share;
|
//分享数
|
private TextView tv_share_count;
|
//推荐语
|
private TextView tv_recommend;
|
//复制推荐语按钮
|
private LinearLayout ll_copy_recommend;
|
|
private RecyclerView rv_content;
|
|
private LinearLayout ll_user;
|
|
private LinearLayout ll_copy_comment;//复制评论
|
|
|
public CircleContentHolder(View view, RecyclerView.RecycledViewPool recycledViewPool) {
|
super(view);
|
this.view = view;
|
iv_portrait = view.findViewById(R.id.iv_portrait);
|
tv_nickname = view.findViewById(R.id.tv_nickname);
|
ll_labels = view.findViewById(R.id.ll_labels);
|
tv_publish_time = view.findViewById(R.id.tv_publish_time);
|
ll_save_picture = view.findViewById(R.id.ll_save_picture);
|
ll_share = view.findViewById(R.id.ll_share);
|
tv_share_count = view.findViewById(R.id.tv_share_count);
|
tv_recommend = view.findViewById(R.id.tv_recommend);
|
ll_copy_recommend = view.findViewById(R.id.ll_copy_recommend);
|
ll_user = view.findViewById(R.id.ll_user);
|
iv_recommend_more = view.findViewById(R.id.iv_recommend_more);
|
ll_content = view.findViewById(R.id.ll_content);
|
ll_copy_comment = view.findViewById(R.id.ll_copy_comment);
|
|
rv_content = view.findViewById(R.id.rv_content);
|
if (recycledViewPool != null)
|
rv_content.setRecycledViewPool(recycledViewPool);
|
}
|
|
}
|
|
private View footerView = null;
|
|
public void addFooterView(View footerView) {
|
if (this.footerView != null) {
|
throw new IllegalStateException("footerView has already exists!");
|
} else {
|
ViewGroup.LayoutParams params = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
|
footerView.setLayoutParams(params);
|
this.footerView = footerView;
|
notifyItemInserted(getItemCount() - 1);
|
}
|
}
|
|
public class CommonHolder extends RecyclerView.ViewHolder {
|
|
public CommonHolder(View view) {
|
super(view);
|
}
|
|
}
|
|
|
class SendCircleContentAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
|
|
public final static int TYPE_IMG = 1;
|
public final static int TYPE_GOODS = 2;
|
public final static int TYPE_COMMENT = 3;
|
public final static int TYPE_LINK = 4;
|
|
private int imgCount = 0;
|
private int commentCount = 0;
|
private int linkCount = 0;
|
|
private Context context;
|
private SendCircleContent content;
|
private TaoBaoGoodsBrief goods;
|
private CommentClickListener commentClickListener;
|
private ImgClickListener imgClickListener;
|
|
private RequestOptions options;
|
|
//最大高度
|
private int maxImgHeight;
|
private int maxImgWidth;
|
|
private int outPosition = 0;
|
|
public SendCircleContentAdapter(Context context, SendCircleContent content, int maxImgHeight, int maxImgWidth, CommentClickListener commentClickListener, ImgClickListener imgClickListener, int outPosition) {
|
this.outPosition = outPosition;
|
options = new RequestOptions().skipMemoryCache(false).centerCrop().placeholder(R.color.send_circle_img_default_color).diskCacheStrategy(DiskCacheStrategy.ALL).error(R.color.send_circle_img_default_color);
|
this.content = content;
|
this.context = context;
|
if (content.getImgList() != null)
|
this.imgCount = content.getImgList().size();
|
if (content.getComments() != null)
|
this.commentCount = content.getComments().size();
|
if (!StringUtil.isEmpty(content.getJumpLink()))
|
this.linkCount = 1;
|
this.goods = content.getGoods();
|
this.commentClickListener = commentClickListener;
|
this.imgClickListener = imgClickListener;
|
this.maxImgHeight = maxImgHeight;
|
this.maxImgWidth = maxImgWidth;
|
|
// this.options = new DisplayImageOptions.Builder()
|
// .showImageForEmptyUri(R.drawable.ic_goods_default)
|
// .showImageOnFail(R.drawable.ic_goods_default)
|
// .cacheInMemory(true)
|
// .cacheOnDisk(true).imageScaleType(ImageScaleType.EXACTLY)
|
// .considerExifParams(true)
|
// .displayer(new FadeInBitmapDisplayer(300)).build();
|
}
|
|
@NonNull
|
@Override
|
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
|
if (viewType == TYPE_IMG) {
|
View view = inflater.inflate(R.layout.item_send_circle_img, parent, false);
|
return new SendCircleContentAdapter.ImgViewHolder(view);
|
} else if (viewType == TYPE_GOODS) {
|
View view = inflater.inflate(R.layout.item_send_circle_goods, parent, false);
|
return new SendCircleContentAdapter.GoodsViewHolder(view);
|
} else if (viewType == TYPE_COMMENT) {
|
View view = inflater.inflate(R.layout.item_send_circle_content_comment, parent, false);
|
return new SendCircleContentAdapter.CommentViewHolder(view);
|
} else if (viewType == TYPE_LINK) {
|
View view = inflater.inflate(R.layout.item_send_circle_link, parent, false);
|
return new SendCircleContentAdapter.LinkViewHolder(view);
|
}
|
|
return null;
|
}
|
|
/**
|
* 初始化设置视图
|
*
|
* @param viewHolder
|
* @param type
|
* @param showErcodeLabel
|
*/
|
private void setView(SendCircleContentAdapter.ImgViewHolder viewHolder, int type, boolean showErcodeLabel) {
|
if (type == 1 || type == 4) {//图片
|
viewHolder.ll_coupon_bg.setVisibility(View.GONE);
|
viewHolder.iv_ercode.setVisibility(View.GONE);
|
viewHolder.iv_play.setVisibility(View.GONE);
|
} else if (type == 2) {//商品
|
if (showErcodeLabel) {
|
viewHolder.ll_coupon_bg.setVisibility(View.GONE);
|
viewHolder.iv_ercode.setVisibility(View.VISIBLE);
|
} else {
|
viewHolder.ll_coupon_bg.setVisibility(View.VISIBLE);
|
viewHolder.iv_ercode.setVisibility(View.GONE);
|
}
|
viewHolder.iv_play.setVisibility(View.GONE);
|
} else if (type == 3) {//视频
|
viewHolder.ll_coupon_bg.setVisibility(View.GONE);
|
viewHolder.iv_ercode.setVisibility(View.GONE);
|
viewHolder.iv_play.setVisibility(View.VISIBLE);
|
}
|
viewHolder.ll_off_line.setVisibility(View.GONE);
|
}
|
|
@Override
|
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder1, int position) {
|
if (holder1 instanceof ImgViewHolder) {
|
final ImgViewHolder holder = (ImgViewHolder) holder1;
|
final int iposition = position;
|
final SendCircleImage imgInfo = content.getImgList().get(iposition);
|
if (imgInfo == null) {
|
holder.view.setVisibility(View.INVISIBLE);
|
return;
|
}
|
holder.view.setVisibility(View.VISIBLE);
|
|
setView(holder, imgInfo.getType(), content.getGoods() != null);
|
|
//计算图片比例
|
float ratio = (float) (imgInfo.getH()) / imgInfo.getW();
|
float maxRatio = 301.0f / 301;
|
|
int width = 0;
|
int height = 0;
|
|
if (imgInfo.isLarge() && maxRatio < ratio) {
|
ViewGroup.LayoutParams params = holder.rl.getLayoutParams();
|
params.width = (int) (maxImgHeight / ratio);
|
width = params.width;
|
height = (int) (width * ratio);
|
holder.rl.setLayoutParams(params);
|
} else {
|
ViewGroup.LayoutParams params = holder.rl.getLayoutParams();
|
if (imgInfo.isLarge())
|
width = maxImgWidth;
|
else {
|
width = (maxImgWidth - DimenUtils.dip2px(mContext, 2) * 3) / 3;
|
}
|
height = (int) (width * ratio);
|
params.width = width;
|
holder.rl.setLayoutParams(params);
|
}
|
|
ViewGroup.LayoutParams imgParams = holder.iv_img.getLayoutParams();
|
imgParams.width = width;
|
imgParams.height = height;
|
holder.iv_img.setLayoutParams(imgParams);
|
holder.rl.setRatio(ratio);
|
Glide.with(mContext).load(imgInfo.getUrl()).apply(options)
|
.into(holder.iv_img);
|
// holder.iv_img.setTag(R.id.iv_img, imgInfo);
|
// if (holder.runnable == null) {
|
// holder.runnable = new Runnable() {
|
// @Override
|
// public void run() {
|
// SendCircleImage img = (SendCircleImage) holder.iv_img.getTag(R.id.iv_img);
|
// Glide.with(mContext).load(img.getUrl()).apply(options)
|
// .into(holder.iv_img);
|
// }
|
// };
|
// }
|
// holder.rl.removeCallbacks(holder.runnable);
|
// holder.rl.post(holder.runnable);
|
|
|
// ImageLoader.getInstance().displayImage(imgInfo.getUrl(),holder.iv_img,options);
|
|
//大图信息特别处理
|
switch (imgInfo.getType()) {
|
case 1:
|
break;//图片
|
case 2:
|
if (content.getGoods() == null) {//设置商品信息
|
if (imgInfo.getGoods() != null) {
|
holder.tv_price.setText("¥" + imgInfo.getGoods().getPrice());
|
holder.tv_coupon_price.setText("¥" + imgInfo.getGoods().getAmount());
|
|
if (StringUtils.isNullOrEmpty(imgInfo.getGoods().getAmount())) {
|
holder.ll_coupon.setVisibility(View.GONE);
|
} else {
|
holder.ll_coupon.setVisibility(View.VISIBLE);
|
}
|
}
|
}
|
|
if (imgInfo != null && imgInfo.getGoods() != null) {
|
if (imgInfo.getGoods().getState() != 0) {
|
holder.ll_off_line.setVisibility(View.VISIBLE);
|
} else {
|
holder.ll_off_line.setVisibility(View.GONE);
|
}
|
}
|
|
break;//商品
|
case 3:
|
break;//视频
|
}
|
|
|
holder.view.setOnClickListener(new View.OnClickListener() {
|
@Override
|
public void onClick(View v) {
|
if (imgClickListener != null)
|
imgClickListener.onClick(iposition);
|
}
|
});
|
|
} else if (holder1 instanceof GoodsViewHolder) {
|
|
|
GoodsViewHolder goodsViewHolder = (GoodsViewHolder) holder1;
|
GoodsDetailListUtil.setGoodsDetail(context, content.getGoods(), goodsViewHolder.goodsRightViewHolder);
|
if (content.getGoods().getState() != 0) {
|
goodsViewHolder.view.setOnClickListener(null);
|
goodsViewHolder.iv_state_invalid.setVisibility(View.VISIBLE);
|
} else {
|
goodsViewHolder.iv_state_invalid.setVisibility(View.GONE);
|
goodsViewHolder.view.setOnClickListener(new View.OnClickListener() {
|
@Override
|
public void onClick(View v) {
|
//跳转商品详情
|
Intent intent = new Intent(mContext, GoodsDetailActivity.class);
|
intent.putExtra("goodsId", content.getGoods().getGoodsId());
|
intent.putExtra("goodsType", content.getGoods().getGoodsType());
|
intent.putExtra("from", "faquan");
|
mContext.startActivity(intent);
|
}
|
});
|
}
|
|
} else if (holder1 instanceof CommentViewHolder) {
|
final CommentViewHolder holder = (CommentViewHolder) holder1;
|
final int cposition = position - imgCount - (goods != null ? 1 : 0) - (StringUtils.isNullOrEmpty(content.getJumpLink()) ? 0 : 1);
|
final SendCircleCommment comment = content.getComments().get(cposition);
|
|
holder.ll_tag.setOnClickListener(new View.OnClickListener() {
|
@Override
|
public void onClick(View v) {
|
if (commentClickListener != null)
|
commentClickListener.onTagClick(cposition);
|
}
|
});
|
|
//标记信息赋值
|
if (!StringUtils.isNullOrEmpty(comment.getTagDesc())) {
|
holder.ll_tag.setVisibility(View.VISIBLE);
|
//赋值
|
holder.ll_labels.removeAllViews();
|
if (comment.getTagList() != null)
|
SetLabels.addLabel(mContext, holder.ll_labels, comment.getTagList());
|
holder.tv_tag_name.setText(comment.getTagDesc());
|
if (!StringUtils.isNullOrEmpty(comment.getTagUrl())) {
|
holder.iv_in.setVisibility(View.VISIBLE);
|
holder.ll_tag.setOnClickListener(new View.OnClickListener() {
|
@Override
|
public void onClick(View v) {
|
mContext.startActivity(new Intent(mContext, ShareBrowserActivity.class).putExtra("url", comment.getTagUrl()));
|
}
|
});
|
} else {
|
holder.iv_in.setVisibility(View.GONE);
|
holder.ll_tag.setOnClickListener(null);
|
}
|
} else {
|
holder.ll_tag.setVisibility(View.GONE);
|
}
|
|
|
holder.tv_content.setClickable(false);
|
if (StringUtils.isNullOrEmpty(comment.getContent())) {
|
holder.ll_content.setVisibility(View.GONE);
|
} else {
|
holder.ll_content.setVisibility(View.VISIBLE);
|
String content = comment.getContent();
|
content += "<img src='icon_common_emoji_link' /> <a href='test:http://www.baidu.com'>这是个可以点击的链接</a> 测试12312312123";
|
holder.tv_content.setText(TextViewUtil.getClickableHtml(Html.fromHtml(content, new Html.ImageGetter() {
|
@Override
|
public Drawable getDrawable(String source) {
|
try {
|
int resId = context.getResources().getIdentifier(source, "drawable", context.getPackageName());
|
Drawable drawable = context.getResources().getDrawable(resId);
|
drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
|
return drawable;
|
} catch (Exception e) {
|
return null;
|
}
|
}
|
}, null), context, Color.parseColor("#586b95")));
|
|
holder.tv_content.setMovementMethod(LinkMovementMethod.getInstance());
|
holder.tv_content.setFocusable(false);
|
holder.tv_content.setClickable(false);
|
holder.tv_content.setLongClickable(false);
|
}
|
|
holder.tv_content.setMaxLines(6);
|
|
// if (!StringUtils.isNullOrEmpty(comment.getType())) {
|
// holder.tv_type.setVisibility(View.VISIBLE);
|
// holder.tv_type.setText(comment.getType());
|
// } else {
|
holder.tv_type.setVisibility(View.GONE);
|
// }
|
|
holder.tv_content.post(new Runnable() {
|
@Override
|
public void run() {
|
Layout l = holder.tv_content.getLayout();
|
if (l != null) {
|
int lines = l.getLineCount();
|
if (lines > 0) {
|
if (l.getEllipsisCount(lines - 1) > 0) {
|
holder.iv_comment_more.setVisibility(View.VISIBLE);
|
|
} else {
|
holder.iv_comment_more.setVisibility(View.GONE);
|
}
|
}
|
}
|
}
|
});
|
|
holder.iv_comment_more.setOnClickListener(new View.OnClickListener() {
|
@Override
|
public void onClick(View v) {
|
//显示TextView的全部内容其实就是取消这类隐藏文字的属性
|
holder.tv_content.setMaxLines(200);
|
holder.iv_comment_more.setVisibility(View.GONE);
|
}
|
});
|
} else if (holder1 instanceof LinkViewHolder) {//链接
|
final LinkViewHolder holder = (LinkViewHolder) holder1;
|
holder.view.setOnClickListener(new View.OnClickListener() {
|
@Override
|
public void onClick(View v) {
|
mContext.startActivity(new Intent(mContext, ShareBrowserActivity.class).putExtra("url", content.getJumpLink()));
|
}
|
});
|
}
|
}
|
|
@Override
|
public int getItemViewType(int position) {
|
int goodsCount = goods != null ? 1 : 0;
|
if (position < imgCount) {//图片
|
return TYPE_IMG;
|
} else if (position < imgCount + goodsCount) {//商品
|
return TYPE_GOODS;
|
} else if (position < imgCount + goodsCount + linkCount) {//商品
|
return TYPE_LINK;
|
} else if (position < imgCount + goodsCount + linkCount + commentCount) {//评论
|
return TYPE_COMMENT;
|
}
|
|
return super.getItemViewType(position);
|
}
|
|
@Override
|
public int getItemCount() {
|
int count = 0;
|
if (content.getImgList() != null)
|
count += content.getImgList().size();
|
if (content.getGoods() != null)
|
count += 1;
|
if (content.getComments() != null)
|
count += content.getComments().size();
|
if (!StringUtils.isNullOrEmpty(content.getJumpLink()))
|
count++;
|
|
return count;
|
}
|
|
class ImgViewHolder extends RecyclerView.ViewHolder {
|
private RatioLayout rl;
|
private ImageView iv_img;
|
private LinearLayout ll_coupon_bg;
|
private LinearLayout ll_off_line;
|
private TextView tv_price;
|
private TextView tv_coupon_price;
|
private ImageView iv_play;
|
private ImageView iv_ercode;
|
private View view;
|
private LinearLayout ll_coupon;
|
private Runnable runnable;
|
|
|
public ImgViewHolder(View view) {
|
super(view);
|
this.view = view;
|
iv_play = view.findViewById(R.id.iv_play);
|
iv_ercode = view.findViewById(R.id.iv_ercode);
|
ll_coupon_bg = view.findViewById(R.id.ll_coupon_bg);
|
iv_img = view.findViewById(R.id.iv_img);
|
rl = view.findViewById(R.id.item_recommend_gv_ral);
|
tv_coupon_price = view.findViewById(R.id.tv_coupon_price);
|
tv_price = view.findViewById(R.id.tv_price);
|
ll_off_line = view.findViewById(R.id.ll_off_line);
|
ll_coupon = view.findViewById(R.id.ll_coupon);
|
}
|
|
}
|
|
class CommentViewHolder extends RecyclerView.ViewHolder {
|
|
private LinearLayout ll_tag;
|
private LinearLayout ll_labels;
|
private TextView tv_tag_name;
|
private ImageView iv_in;
|
private TextView tv_content;
|
private TextView tv_type;
|
private LinearLayout ll_content;
|
private ImageView iv_comment_more;
|
|
public CommentViewHolder(View view) {
|
super(view);
|
ll_tag = view.findViewById(R.id.ll_tag);
|
iv_in = view.findViewById(R.id.iv_in);
|
ll_labels = view.findViewById(R.id.ll_labels);
|
tv_content = view.findViewById(R.id.tv_content);
|
tv_tag_name = view.findViewById(R.id.tv_tag_name);
|
tv_type = view.findViewById(R.id.tv_type);
|
iv_comment_more = view.findViewById(R.id.iv_comment_more);
|
ll_content = view.findViewById(R.id.ll_content);
|
}
|
|
}
|
|
|
//连接
|
class LinkViewHolder extends RecyclerView.ViewHolder {
|
private View view;
|
|
public LinkViewHolder(View view) {
|
super(view);
|
this.view = view;
|
}
|
}
|
|
|
class GoodsViewHolder extends RecyclerView.ViewHolder {
|
private View view;
|
private GoodsRightViewHolder goodsRightViewHolder;
|
//过期标识
|
private ImageView iv_state_invalid;
|
|
public GoodsViewHolder(View view) {
|
super(view);
|
this.view = view;
|
iv_state_invalid = view.findViewById(R.id.iv_state_invalid);
|
goodsRightViewHolder = new GoodsRightViewHolder(view);
|
}
|
}
|
}
|
|
public class SpaceItemDecoration extends RecyclerView.ItemDecoration {
|
private int space;
|
|
private int largeImgCount, smallImageCount, goodsCount, commentCount, lineNum;
|
|
public SpaceItemDecoration(int largeImgCount, int smallImageCount, int goodsCount, int commentCount, int lineNum, int space) {
|
this.space = space;
|
this.largeImgCount = largeImgCount;
|
this.smallImageCount = smallImageCount;
|
this.goodsCount = goodsCount;
|
this.commentCount = commentCount;
|
this.lineNum = lineNum;
|
this.space = space;
|
}
|
|
|
public void initData(int largeImgCount, int smallImageCount, int goodsCount, int commentCount, int lineNum, int space) {
|
this.space = space;
|
this.largeImgCount = largeImgCount;
|
this.smallImageCount = smallImageCount;
|
this.goodsCount = goodsCount;
|
this.commentCount = commentCount;
|
this.lineNum = lineNum;
|
this.space = space;
|
}
|
|
@Override
|
public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
|
int position = parent.getChildLayoutPosition(view);
|
if (position < largeImgCount) {
|
outRect.bottom = space * 6;
|
if (position == 0)
|
outRect.top = 0;
|
} else if (position < largeImgCount + smallImageCount) {
|
int cposition = position - largeImgCount;
|
|
outRect.left = space;
|
outRect.bottom = space * 3;
|
lineNum = 3;
|
if (cposition % lineNum == 0) {
|
outRect.left = 0;
|
outRect.right = 2 * space;
|
} else if (cposition % lineNum == lineNum - 1) {
|
outRect.left = 2 * space;
|
outRect.right = 0;
|
} else {
|
outRect.left = space;
|
outRect.right = space;
|
}
|
//判断是否为最后一行
|
int currentRow = cposition / lineNum;
|
int totalRow = smallImageCount % lineNum == 0 ? smallImageCount / lineNum : smallImageCount / lineNum + 1;
|
if (currentRow + 1 == totalRow) {
|
outRect.bottom = space * 6;
|
}
|
|
|
} else if (position < largeImgCount + smallImageCount + goodsCount) {
|
outRect.bottom = space * 3;
|
outRect.top = 0;
|
outRect.left = 0;
|
outRect.right = 0;
|
} else if (position < largeImgCount + smallImageCount + goodsCount + commentCount) {
|
outRect.bottom = space * 3;
|
outRect.top = space * 3;
|
int cposition = position - (largeImgCount + smallImageCount + goodsCount + commentCount);
|
if (cposition == 0 && goodsCount > 0)
|
outRect.top = 0;
|
outRect.left = 0;
|
outRect.right = 0;
|
}
|
}
|
|
}
|
|
interface ImgClickListener {
|
public void onClick(int position);
|
}
|
|
public interface CommentClickListener {
|
//标签点击
|
public void onTagClick(int position);
|
|
//复制点击
|
public void onCopyClick(int position);
|
}
|
|
//adapter中的事件响应
|
public interface AdapterEventActionListener {
|
//复制评论
|
public void copyComment(SendCircleContent content, SendCircleCommment comment);
|
|
//生成二维码
|
public void createERCode(SendCircleContent content, List<SendCircleImage> imgList, SendCircleImage img, int position);
|
|
//分享
|
public void share(SendCircleContent content);
|
|
//批量存图
|
public void saveImgs(SendCircleContent content);
|
|
//复制推荐语
|
public void copyRecommendText(SendCircleContent content);
|
|
public void sendOrder(SendCircleContent content);
|
}
|
}
|