package licola.demo.com.huabandemo.Adapter;
import android.graphics.drawable.Animatable;
import android.graphics.drawable.Drawable;
import android.support.v7.widget.RecyclerView;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import android.widget.ImageButton;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.facebook.drawee.view.SimpleDraweeView;
import licola.demo.com.huabandemo.Base.BaseRecyclerAdapter;
import licola.demo.com.huabandemo.Entity.PinsMainEntity;
import licola.demo.com.huabandemo.HttpUtils.ImageLoad.ImageLoadBuilder;
import licola.demo.com.huabandemo.HttpUtils.ImageLoad.ImageLoadFresco;
import licola.demo.com.huabandemo.R;
import licola.demo.com.huabandemo.Util.CompatUtils;
import licola.demo.com.huabandemo.Util.Utils;
import static android.view.View.GONE;
import static android.view.View.INVISIBLE;
import static android.view.View.OnClickListener;
import static android.view.ViewGroup.VISIBLE;
/**
* Created by LiCola on 2016/03/22 18:00
* 负责展示 图片CardView 的adapter
*/
public class RecyclerPinsHeadCardAdapter extends BaseRecyclerAdapter<PinsMainEntity> {
private boolean mIsShowUser = false;//是否显示用户头像和名字的标志位
private OnAdapterListener mListener;
public interface OnAdapterListener {
void onClickImage(PinsMainEntity bean, View view);
void onClickTitleInfo(PinsMainEntity bean, View view);
void onClickInfoGather(PinsMainEntity bean, View view);
void onClickInfoLike(PinsMainEntity bean, View view);
}
public RecyclerPinsHeadCardAdapter(RecyclerView mRecyclerView) {
super(mRecyclerView);
}
//多一个标志位的 构造函数
public RecyclerPinsHeadCardAdapter(RecyclerView recyclerView, boolean isShowUser) {
this(recyclerView);
this.mIsShowUser = isShowUser;
}
public void setOnClickItemListener(OnAdapterListener mListener) {
this.mListener = mListener;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
// Logger.d(life);
ViewHolderGeneral holder = null;//ViewHolder的子类
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.cardview_item_image, parent, false);
holder = new ViewHolderGeneral(view);//使用子类初始化ViewHolder
holder.tv_card_like.setCompoundDrawablesWithIntrinsicBounds(
CompatUtils.getTintListDrawable(mContext, R.drawable.ic_favorite_black_18dp, R.color.tint_list_grey),
null,
null,
null);
holder.tv_card_gather.setCompoundDrawablesWithIntrinsicBounds(
CompatUtils.getTintListDrawable(mContext, R.drawable.ic_camera_black_18dp, R.color.tint_list_grey),
null,
null,
null);
//子类可以自动转型为父类
return holder;
}
@Override
public void onViewRecycled(RecyclerView.ViewHolder holder) {
super.onViewRecycled(holder);
//当有被被回收viewHolder调用
//Logger.d(life);
}
@Override
public void onBindViewHolder(final RecyclerView.ViewHolder holder, int position) {
// Logger.d(life);
final PinsMainEntity bean = mList.get(position);
//注释的是 动态修改image高度
// LayoutParams lp = holder.img_card_image.getLayoutParams();
// lp.height = height[mAdapterPosition];
// holder.img_card_image.setLayoutParams(lp);
//父类强制转换成子类 因为这个holder本来就是子类初始化的 所以可以强转
ViewHolderGeneral viewHolder = (ViewHolderGeneral) holder;//强制类型转换 转成内部的ViewHolder
onBindData(viewHolder, bean);
onBindListener(viewHolder, bean);//初始化点击事件
}
private void onBindData(final ViewHolderGeneral holder, PinsMainEntity bean) {
//检查图片信息
if (checkInfoContext(bean)) {
holder.ll_title_info.setVisibility(VISIBLE);
String title = bean.getRaw_text();//图片的文字描述
int like = bean.getLike_count();//被喜欢数量
int gather = bean.getRepin_count();//被转采的数量
if (!TextUtils.isEmpty(title)) {
holder.tv_card_title.setVisibility(VISIBLE);
holder.tv_card_title.setText(title);
} else {
holder.tv_card_title.setVisibility(GONE);
}
holder.tv_card_like.setText(" " + like);
holder.tv_card_gather.setText(" " + gather);
} else {
holder.ll_title_info.setVisibility(GONE);
}
// String url_img = mUrlFormat + bean.getFile().getKey()+"_fw320sf";
String url_img = String.format(mUrlGeneralFormat, bean.getFile().getKey());
// String mImageUrl = "http://img.hb.aicdn.com/1d16a79ac7cffbec844eb48e7e714c9f8c0afffc7f997-ZZCJsm";
if (Utils.checkIsGif(bean.getFile().getType())) {
holder.ibtn_card_gif.setVisibility(VISIBLE);
} else {
holder.ibtn_card_gif.setVisibility(INVISIBLE);
}
float ratio = Utils.getAspectRatio(bean.getFile().getWidth(), bean.getFile().getHeight());
//长图 "width":440,"height":5040,
holder.img_card_image.setAspectRatio(ratio);//设置宽高比
Drawable dProgressImage =
CompatUtils.getTintListDrawable(mContext, R.drawable.ic_toys_black_48dp, R.color.tint_list_pink);
ImageLoadBuilder.Start(mContext, holder.img_card_image, url_img)
.setProgressBarImage(dProgressImage)
//加载gif图 自动播放
// .setControllerListener(new BaseControllerListener<ImageInfo>() {
// @Override
// public void onFinalImageSet(String id, ImageInfo imageInfo, Animatable animatable) {
// super.onFinalImageSet(id, imageInfo, animatable);
// if (animatable != null) {
// holder.ibtn_card_gif.setVisibility(VISIBLE);
// setPlayListener(holder, animatable);
// setPlayDrawable(holder, false);
// } else {
// holder.ibtn_card_gif.setVisibility(INVISIBLE);
// }
// }
// })
.build();
}
/**
* 检查三项信息 任何一项不为空 都返回true
*
* @param bean
* @return
*/
private boolean checkInfoContext(PinsMainEntity bean) {
String title = bean.getRaw_text();//图片的文字描述
int like = bean.getLike_count();//被喜欢数量
int gather = bean.getRepin_count();//被转采的数量
if (!TextUtils.isEmpty(title)) {
return true;
} else if (like > 0 || gather > 0) {
return true;
}
return false;
}
private void onBindListener(ViewHolderGeneral holder, final PinsMainEntity bean) {
holder.rl_image.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
mListener.onClickImage(bean, v);
}
});
holder.ll_title_info.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
mListener.onClickTitleInfo(bean, v);
}
});
holder.tv_card_gather.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
mListener.onClickInfoGather(bean, v);
}
});
holder.tv_card_like.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
mListener.onClickInfoLike(bean, v);
// RxBus.getDefault().post(bean);
}
});
}
/**
* 设置ibtn_card_gif的显示
* 传true就显示暂停 传false显示播放
*
* @param holder
* @param isRunning 默认false为不播放
*/
private void setPlayDrawable(ViewHolderGeneral holder, boolean isRunning) {
if (!isRunning) {
Drawable drawable = holder.ibtn_card_gif.getResources().getDrawable(android.R.drawable.ic_media_play);
holder.ibtn_card_gif.setImageDrawable(drawable);
} else {
Drawable drawable = holder.ibtn_card_gif.getResources().getDrawable(android.R.drawable.ic_media_pause);
holder.ibtn_card_gif.setImageDrawable(drawable);
}
}
private void setPlayListener(final ViewHolderGeneral holder, final Animatable animatable) {
holder.ibtn_card_gif.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (!animatable.isRunning()) {
animatable.start();
setPlayDrawable(holder, true);
} else {
animatable.stop();
setPlayDrawable(holder, false);
}
}
});
}
public static class ViewHolderGeneral extends RecyclerView.ViewHolder {
//这个CardView采用两层操作
public final View mView;
public final FrameLayout rl_image;//第一层 包含图片和播放按钮
public final SimpleDraweeView img_card_image;
public final ImageButton ibtn_card_gif;
public final LinearLayout ll_title_info;//第二层 包含描述 图片信息
public final TextView tv_card_title;//第二层 描述title
public final LinearLayout ll_info;//第二层的子类 包含图片被采集和喜爱的信息
public final TextView tv_card_gather;
public final TextView tv_card_like;
public ViewHolderGeneral(View view) {
super(view);
mView = view;
rl_image = (FrameLayout) view.findViewById(R.id.framelayout_image);
img_card_image = (SimpleDraweeView) view.findViewById(R.id.img_card_image);//主图
ibtn_card_gif = (ImageButton) view.findViewById(R.id.ibtn_card_gif);//播放按钮
ll_title_info = (LinearLayout) view.findViewById(R.id.linearlayout_title_info);//图片所有文字信息
tv_card_title = (TextView) view.findViewById(R.id.tv_card_title);//描述的title
ll_info = (LinearLayout) view.findViewById(R.id.linearlayout_info);//文字子类
tv_card_gather = (TextView) view.findViewById(R.id.tv_card_gather);
tv_card_like = (TextView) view.findViewById(R.id.tv_card_like);
}
}
}