package licola.demo.com.huabandemo.Module.Main;
import android.content.Context;
import android.graphics.drawable.Animatable;
import android.graphics.drawable.Drawable;
import android.support.v4.content.ContextCompat;
import android.support.v4.graphics.drawable.DrawableCompat;
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.controller.BaseControllerListener;
import com.facebook.drawee.view.SimpleDraweeView;
import com.facebook.imagepipeline.image.ImageInfo;
import java.util.ArrayList;
import java.util.List;
import licola.demo.com.huabandemo.Entity.PinsMainEntity;
import licola.demo.com.huabandemo.HttpUtils.ImageLoad.ImageLoadBuilder;
import licola.demo.com.huabandemo.R;
import licola.demo.com.huabandemo.Util.Utils;
import licola.demo.com.huabandemo.HttpUtils.ImageLoad.ImageLoadFresco;
import static android.view.ViewGroup.OnClickListener;
import static android.view.ViewGroup.VISIBLE;
/**
* TODO: Replace the implementation with code for your data type.
*/
public class MainRecyclerViewAdapter extends RecyclerView.Adapter<MainRecyclerViewAdapter.ViewHolder> {
private final String life = "Life";
private Context mContext;
private List<PinsMainEntity> mList = new ArrayList<>(20);
private onAdapterListener mListener;
private final String url_root;
public int mAdapterPosition = 0;
public List<PinsMainEntity> getmList() {
return mList;
}
public void setmList(List<PinsMainEntity> mList) {
this.mList = mList;
notifyDataSetChanged();
}
public void setNotifyData(List<PinsMainEntity> mList) {
this.mList.addAll(mList);
notifyDataSetChanged();
}
public int getmAdapterPosition() {
return mAdapterPosition;
}
public void setmAdapterPosition(int mAdapterPosition) {
this.mAdapterPosition = mAdapterPosition;
}
public interface onAdapterListener {
void onClickImage(PinsMainEntity bean, View view);
void onClickBoard(PinsMainEntity bean, View view);
void onClickInfo(PinsMainEntity bean, View view);
}
public MainRecyclerViewAdapter(Context context) {
this.mContext = context;
this.url_root = mContext.getResources().getString(R.string.urlImageRoot);
}
public void setOnClickItemListener(onAdapterListener mListener) {
this.mListener = mListener;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
// Logger.d(life);
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.cardview_item, parent, false);
return new ViewHolder(view);
}
@Override
public void onViewRecycled(ViewHolder holder) {
super.onViewRecycled(holder);
//当有被被回收viewHolder调用
// Logger.d(life);
holder.img_card_image.setTag(null);
holder.img_card_head.setTag(null);
holder.ibtn_card_gif.setVisibility(View.INVISIBLE);
}
@Override
public void onBindViewHolder(final ViewHolder holder, int position) {
// Logger.d(life);
// Logger.d(holder.toString());
final PinsMainEntity bean = mList.get(position);
//注释的是 动态修改image高度
// LayoutParams lp = holder.img_card_image.getLayoutParams();
// lp.height = height[mAdapterPosition];
// holder.img_card_image.setLayoutParams(lp);
onBindData(holder, bean);
onBindListener(holder, bean);//初始化点击事件
}
@Override
public void onViewAttachedToWindow(final ViewHolder holder) {
super.onViewAttachedToWindow(holder);
// Logger.d(life);
mAdapterPosition = holder.getAdapterPosition();
}
private void onBindData(final ViewHolder holder, PinsMainEntity bean) {
String title = bean.getRaw_text();
if (!TextUtils.isEmpty(title)) {
holder.tv_card_title.setVisibility(VISIBLE);
holder.tv_card_title.setText(title);
} else {
holder.tv_card_title.setVisibility(View.GONE);
}
holder.tv_card_gather.setText(bean.getBoard().getTitle());
holder.tv_card_username.setText(bean.getUser().getUsername());
String url_img = url_root + bean.getFile().getKey();
String url_head = bean.getUser().getAvatar();
// String mImageUrl = "http://img.hb.aicdn.com/1d16a79ac7cffbec844eb48e7e714c9f8c0afffc7f997-ZZCJsm";
float ratio = Utils.getAspectRatio(bean.getFile().getWidth(), bean.getFile().getHeight());
//长图 "width":440,"height":5040,
holder.img_card_image.setAspectRatio(ratio);//设置宽高比
// FrescoBuilder.setHeadDrawableMC2V(mContext, holder.img_card_head, url_head,true);
ImageLoadBuilder.Start(mContext, holder.img_card_head, url_head)
.setIsCircle(true)
.build();
// FrescoBuilder.setImageDrawableMC2V(mContext, holder.img_card_image, mImageUrl, new FrescoBuilder.onAnimatableListener() {
// @Override
// public void onComplete(boolean isPlay, Animatable animatable) {
// if (isPlay) {
// holder.ibtn_card_gif.setVisibility(VISIBLE);
// setPlayListener(holder, animatable);
// setPlayDrawable(holder, false);
// }
// }
// });
Drawable dProgressImage = DrawableCompat.wrap(ContextCompat.getDrawable(mContext, R.drawable.ic_toys_black_24dp).mutate());
DrawableCompat.setTintList(dProgressImage, ContextCompat.getColorStateList(mContext, R.color.tint_list_pink));
ImageLoadBuilder.Start(mContext, holder.img_card_image, url_img)
.setProgressBarImage(dProgressImage)
.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);
}
}
})
.build();
}
private void onBindListener(final ViewHolder holder, final PinsMainEntity bean) {
holder.rl_image.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
mListener.onClickImage(bean, holder.rl_image);
}
});
holder.ll_board.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
mListener.onClickBoard(bean, holder.ll_board);
}
});
holder.ll_info.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
mListener.onClickInfo(bean, holder.ll_info);
}
});
}
/**
* 设置ibtn_card_gif的显示
* 传true就显示暂停 传false显示播放
*
* @param holder
* @param isRunning 默认false为不播放
*/
private void setPlayDrawable(ViewHolder 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 ViewHolder 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);
}
}
});
}
@Override
public int getItemCount() {
return mList.size();
}
public class ViewHolder 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_board;//第二层
public final TextView tv_card_title;
public final TextView tv_card_gather;
public final LinearLayout ll_info;//第三层
public final TextView tv_card_username;
public final SimpleDraweeView img_card_head;
public ViewHolder(View view) {
super(view);
mView = view;
rl_image = (FrameLayout) view.findViewById(R.id.framelayout_image);
ll_info = (LinearLayout) view.findViewById(R.id.linearlayout_info);
ll_board = (LinearLayout) view.findViewById(R.id.ll_board);
img_card_image = (SimpleDraweeView) view.findViewById(R.id.img_card_image);
img_card_head = (SimpleDraweeView) view.findViewById(R.id.img_card_head);
ibtn_card_gif = (ImageButton) view.findViewById(R.id.ibtn_card_gif);
tv_card_title = (TextView) view.findViewById(R.id.tv_card_title);
tv_card_username = (TextView) view.findViewById(R.id.tv_card_username);
tv_card_gather = (TextView) view.findViewById(R.id.tv_card_gather);
}
}
}