package com.tal.jxtteacher.uijxt.weight;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.RecyclerView.ItemDecoration;
import android.view.View;
import com.tal.jxtteacher.uijxt.adapter.RecyclerViewAdapter;
public class CreatGroupPickContactsItemDecoration extends ItemDecoration {
//头部的高
private int mItemHeaderHeight;
private int mTextPaddingLeft;
//画笔,绘制头部和分割线
private Paint mItemHeaderPaint;
private Paint mTextPaint;
private Paint mLinePaint;
private Rect mTextRect;
private Context context;
public CreatGroupPickContactsItemDecoration(Context context) {
this.context = context;
mItemHeaderHeight = dp2px(context, 40);
mTextPaddingLeft = dp2px(context, 0);
mTextRect = new Rect();
mItemHeaderPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
mItemHeaderPaint.setColor(Color.WHITE);
mTextPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
mTextPaint.setTextSize(46);
mTextPaint.setColor(Color.parseColor("#979797"));
mLinePaint = new Paint(Paint.ANTI_ALIAS_FLAG);
mLinePaint.setStyle(Paint.Style.FILL);
mLinePaint.setColor(Color.parseColor("#EFEFEF"));
}
/**
* 绘制Item的分割线和组头
*
* @param c
* @param parent
* @param state
*/
@Override
public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) {
if (parent.getAdapter() instanceof RecyclerViewAdapter) {
RecyclerViewAdapter adapter = (RecyclerViewAdapter) parent.getAdapter();
int count = parent.getChildCount();//获取可见范围内Item的总数
for (int i = 0; i < count; i++) {
View view = parent.getChildAt(i);
int position = parent.getChildLayoutPosition(view);
boolean isHeader = adapter.isItemHeader(position);
int left = parent.getPaddingLeft();
int right = parent.getWidth() - parent.getPaddingRight();
if (isHeader) {
c.drawRect(left, view.getTop() - mItemHeaderHeight, right, view.getTop(), mItemHeaderPaint);
mTextPaint.getTextBounds(adapter.getGroupName(position), 0, adapter.getGroupName(position).length(), mTextRect);
c.drawText(adapter.getGroupName(position), left + mTextPaddingLeft, (view.getTop() - mItemHeaderHeight) + mItemHeaderHeight / 2 + mTextRect.height() / 2, mTextPaint);
c.drawRect(left,view.getTop()-mItemHeaderHeight,right,view.getTop()-mItemHeaderHeight+dp2px(context,1),mLinePaint);
c.drawRect(left,view.getTop() - dp2px(context,1),right,view.getTop(),mLinePaint);
} else {
c.drawRect(left, view.getTop() - dp2px(context,1), right, view.getTop(), mLinePaint);
}
}
}
}
/**
* 绘制Item的顶部布局(吸顶效果)
*
* @param c
* @param parent
* @param state
*/
@Override
public void onDrawOver(Canvas c, RecyclerView parent, RecyclerView.State state) {
if (parent.getAdapter() instanceof RecyclerViewAdapter) {
RecyclerViewAdapter adapter = (RecyclerViewAdapter) parent.getAdapter();
int position = ((LinearLayoutManager) (parent.getLayoutManager())).findFirstVisibleItemPosition();
if (position < 0){
return;
}
View view = parent.findViewHolderForAdapterPosition(position).itemView;
boolean isHeader = adapter.isItemHeader(position + 1);
int top = parent.getPaddingTop();
int left = parent.getPaddingLeft();
int right = parent.getWidth() - parent.getPaddingRight();
if (isHeader) {
int bottom = Math.min(mItemHeaderHeight, view.getBottom());
c.drawRect(left, top + view.getTop() - mItemHeaderHeight, right, top + bottom, mItemHeaderPaint);
mTextPaint.getTextBounds(adapter.getGroupName(position), 0, adapter.getGroupName(position).length(), mTextRect);
c.drawText(adapter.getGroupName(position), left + mTextPaddingLeft, top + mItemHeaderHeight / 2 + mTextRect.height() / 2 - (mItemHeaderHeight - bottom), mTextPaint);
} else {
c.drawRect(left, top, right, top + mItemHeaderHeight, mItemHeaderPaint);
mTextPaint.getTextBounds(adapter.getGroupName(position), 0, adapter.getGroupName(position).length(), mTextRect);
c.drawText(adapter.getGroupName(position), left + mTextPaddingLeft, top + mItemHeaderHeight / 2 + mTextRect.height() / 2, mTextPaint);
}
c.save();
}
}
/**
* 设置Item的间距
*
* @param outRect
* @param view
* @param parent
* @param state
*/
@Override
public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
if (parent.getAdapter() instanceof RecyclerViewAdapter) {
RecyclerViewAdapter adapter = (RecyclerViewAdapter) parent.getAdapter();
int position = parent.getChildLayoutPosition(view);
boolean isHeader = adapter.isItemHeader(position);
if (isHeader) {
outRect.top = mItemHeaderHeight;
} else {
outRect.top = dp2px(context,1);
}
}
}
/**
* dp转换成px
*/
private int dp2px(Context context, float dpValue) {
float scale = context.getResources().getDisplayMetrics().density;
return (int) (dpValue * scale + 0.5f);
}
}
package com.tal.jxtteacher.uijxt.adapter;
import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v4.app.ActivityCompat;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.ImageView;
import android.widget.TextView;
import com.facebook.drawee.view.SimpleDraweeView;
import com.hyphenate.easeui.domain.EaseUser;
import com.hyphenate.easeui.utils.EaseUserUtils;
import com.tal.jxtteacher.R;
import com.tal.jxtteacher.uijxt.interface_name.SimpleCallBack;
import com.tal.jxtteacher.utils.UIUtils;
import java.util.ArrayList;
import java.util.List;
public class RecyclerViewAdapter extends SingleRecyclerViewAdapter<EaseUser> {
private List<String> mExistMembers;
private List<String> pickMembers;
private SimpleCallBack simpleCallBack;
public RecyclerViewAdapter(Context context, List<String> existMembers,SimpleCallBack simpleCallBack) {
super(context);
this.mExistMembers = existMembers;
this.pickMembers = new ArrayList<>();
this.simpleCallBack = simpleCallBack;
}
@NonNull
@Override
public HashViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(mContext).inflate(R.layout.view_group_pick_comtacts,parent,false);
HashViewHolder viewHolder = new HashViewHolder(view);
return viewHolder;
}
@Override
public void onBindViewHolder(@NonNull HashViewHolder holder, final int position) {
EaseUser item = getItem(position);
final CheckBox checkbox = holder.findView(R.id.checkbox);
SimpleDraweeView avatar = holder.findView(R.id.avatar);
ImageView iv_mengcheng = holder.findView(R.id.iv_mengcheng);
TextView name= holder.findView(R.id.name);
final String username = item.getUsername();
// name.setText(item.getNickname());
EaseUserUtils.setUserNick(username,name);
UIUtils.setUserAvatar(item.getAvatar(),avatar);
if(mExistMembers != null && mExistMembers.contains(username)){
checkbox.setButtonDrawable(R.drawable.em_checkbox_bg_gray_selector_new);
}else{
checkbox.setButtonDrawable(R.drawable.em_checkbox_bg_selector_new);
}
checkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (mExistMembers.contains(username)){
if (!isChecked){
checkbox.setChecked(true);
}
}else{
if (isChecked){
if (!pickMembers.contains(username)) {
pickMembers.add(username);
}
}else{
if (pickMembers.contains(username)){
pickMembers.remove(username);
}
}
refresh();
}
}
});
if (mExistMembers.contains(username)){
checkbox.setChecked(true);
iv_mengcheng.setVisibility(View.VISIBLE);
name.setTextColor(ActivityCompat.getColor(mContext,R.color.color_BABABA));
}else{
iv_mengcheng.setVisibility(View.GONE);
name.setTextColor(ActivityCompat.getColor(mContext,R.color.color_323233));
if (pickMembers.contains(username)){
checkbox.setChecked(true);
}else{
checkbox.setChecked(false);
}
}
}
private void refresh(){
int size = pickMembers.size();
if (size == 0){
if (simpleCallBack != null){
simpleCallBack.callBack("确定");
}
}else {
if (simpleCallBack != null){
simpleCallBack.callBack("确定("+size+")");
}
}
}
//判断该是否是同组的第一个
public boolean isItemHeader(int position) {
if (getItems() == null) {
return false;
}
if (getItems().isEmpty()) {
return false;
}
if (position <= 0) {
return true;
} else {
return !getItems().get(position).getInitialLetter().equals(getItems().get(position - 1).getInitialLetter());
}
}
public String getGroupName(int position) {
return getItems().get(position).getInitialLetter();
}
public List<String> getPicks() {
return pickMembers;
}
}
package com.tal.jxtteacher.uijxt.adapter;
import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.util.SparseArray;
import android.view.View;
import java.util.ArrayList;
import java.util.List;
public abstract class SingleRecyclerViewAdapter<T> extends RecyclerView.Adapter<SingleRecyclerViewAdapter.HashViewHolder> {
public Context mContext;
private List<T> mItems;
public SingleRecyclerViewAdapter(Context context){
this.mContext = context;
this.mItems = new ArrayList<>();
}
// @NonNull
// @Override
// public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
// return null;
// }
//
// @Override
// public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
//
// }
@Override
public int getItemCount() {
if (mItems == null){
return 0;
}
return mItems.size();
}
public T getItem(int position) {
if(mItems == null)
return null;
if(position < mItems.size())
return mItems.get(position);
return null;
}
@Override
public long getItemId(int position) {
return position;
}
public void clear() {
if (this.mItems != null){
this.mItems.clear();
}
notifyDataSetChanged();
}
public void setItems(List<T> items){
if (this.mItems != null){
this.mItems.clear();
this.mItems.addAll(items);
}
// this.mItems = items;
notifyDataSetChanged();
}
public void addItems(List<T> items) {
if(mItems != null) {
this.mItems.addAll(items);
notifyDataSetChanged();
}
}
public List<T> getItems(){
return mItems;
}
public void removeItem(T t){
int index = mItems.indexOf(t);
if(index >= 0) {
mItems.remove(t);
notifyItemRemoved(index);
}
}
public void removeItem(int position){
mItems.remove(position);
notifyDataSetChanged();
}
public void removeItemNoNotify(int position){
mItems.remove(position);
}
public void removeItemAnim(int position){
removeItemNoNotify(position);
notifyItemRemoved(position);
notifyItemRangeChanged(position,getItemCount());
}
public void addItem(T t){
if(!mItems.contains(t)) {
mItems.add(t);
notifyItemInserted(getItemCount() - 1);
}
}
public void addItemAnim(T t){
mItems.add(t);
notifyItemInserted(getItemCount() - 1);
}
public static class HashViewHolder extends RecyclerView.ViewHolder{
private SparseArray<View> mViewCache = new SparseArray<>();
public HashViewHolder(@NonNull View itemView) {
super(itemView);
}
public void putView(int id){
if (itemView != null){
mViewCache.put(id,itemView.findViewById(id));
}
}
public <T extends View> T findView(int id){
View view = mViewCache.get(id);
if (view == null){
view = itemView.findViewById(id);
mViewCache.put(id,view);
}
return (T) view;
}
}
}
private void initData(List<EaseUser> alluserList) {
sb_star.setCenterTextView(tv_pick);
sb_star.setOnIndexChangedListener(new STARSiderBar.OnIndexTouchedChangedListener() {
@Override
public void onIndexChanged(String index, int position) {
scrollToSection(index);
}
});
manager = new LinearLayoutManager(getContext());
rcv_group_pick.setLayoutManager(manager);
CreatGroupPickContactsItemDecoration decoration = new CreatGroupPickContactsItemDecoration(getContext());
rcv_group_pick.addItemDecoration(decoration);
adapter = new RecyclerViewAdapter(getContext(), existMembers, new SimpleCallBack() {
@Override
public void callBack(String msg) {
tv_ok.setText(msg);
}
});
rcv_group_pick.setAdapter(adapter);
// adapter.setItems(alluserList);
}