package com.zjh.administrat.recycleviewdemo.grid;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.OrientationHelper;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.widget.Toast;
import com.zjh.administrat.recycleviewdemo.R;
import com.zjh.administrat.recycleviewdemo.bean.User;
import com.zjh.administrat.recycleviewdemo.decoration.CustomDecoration;
public class GridActivity extends AppCompatActivity {
private final int mSpanCount = 4;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_grid);
init();
}
private void init() {
RecyclerView recyclerView = findViewById(R.id.recyclerView);
GridLayoutManager gridLayoutManager = new GridLayoutManager(this, mSpanCount);
gridLayoutManager.setOrientation(OrientationHelper.VERTICAL);
//设置管理器
recyclerView.setLayoutManager(gridLayoutManager);
final GridAdapter mAdapter = new GridAdapter();
for (int i = 0; i < 20; i++) {
User user = new User();
user.setName("网格" + i);
mAdapter.setDatas(user);
}
//设置Adapter
recyclerView.setAdapter(mAdapter);
CustomDecoration customDecoration = new CustomDecoration(this);
recyclerView.addItemDecoration(customDecoration);
//设置动画
recyclerView.setItemAnimator(new DefaultItemAnimator());
//添加数据
findViewById(R.id.recycler_grid_add).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
User user = new User();
user.setName("方块");
mAdapter.addDatas(0, user);
}
});
//设置分隔线系统自带
DividerItemDecoration divider = new DividerItemDecoration(this, DividerItemDecoration.VERTICAL);
//添加自定义分割线
divider.setDrawable(ContextCompat.getDrawable(this, R.drawable.recycler_divider_horizontal));
recyclerView.addItemDecoration(divider);
//获取接口视度
mAdapter.setClickLinear(new GridAdapter.Click() {
@Override
public void OnClick(int i) {
Toast.makeText(GridActivity.this, ""+i, Toast.LENGTH_SHORT).show();
}
@Override
public void OnLongClick(int i) {
mAdapter.removeData(i);
}
});
}
}
GridAdapter
package com.zjh.administrat.recycleviewdemo.grid;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
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.zjh.administrat.recycleviewdemo.Linear.LinearAdapter;
import com.zjh.administrat.recycleviewdemo.R;
import com.zjh.administrat.recycleviewdemo.bean.User;
import java.util.ArrayList;
import java.util.List;
public class GridAdapter extends RecyclerView.Adapter<GridAdapter.ViewHolder>{
private List<User> mDatas;
public GridAdapter() {
this.mDatas = new ArrayList<>();
}
public void setDatas(User user) {
if (user != null){
mDatas.add(user);
}
}
//添加数据
public void addDatas(int i, User user) {
mDatas.add(i, user);
notifyItemInserted(i);
}
/**
* 移除数据
*/
public void removeData(int i) {
mDatas.remove(i);
//必须使用notifyItemRemoved 才能加载移除动画
notifyItemRemoved(i);
}
public class ViewHolder extends RecyclerView.ViewHolder {
public final TextView title;
public final ImageView avatar;
public final LinearLayout linearLayout;
public ViewHolder(@NonNull View itemView) {
super(itemView);
title = itemView.findViewById(R.id.recycle_grid_text);
avatar = itemView.findViewById(R.id.recycle_grid_image);
linearLayout = itemView.findViewById(R.id.grid_Linear_layout);
}
}
@NonNull
@Override
public GridAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item_recycle_grid, viewGroup, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull GridAdapter.ViewHolder viewHolder, final int i) {
User user = mDatas.get(i);
viewHolder.title.setText(user.getName());
//点击点击---------------
viewHolder.linearLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (mClick != null){
mClick.OnClick(i);
}
}
});
//长按长按-------------
viewHolder.linearLayout.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
if(mClick != null){
mClick.OnLongClick(i);
}
return true;
}
});
}
@Override
public int getItemCount() {
return mDatas.size();
}
//成员变量
Click mClick;
//set方法
public void setClickLinear(Click click){
mClick = click;
}
//定义一个接口
public interface Click{
void OnClick(int i);
void OnLongClick(int i);
}
}
CustomDecoration
package com.zjh.administrat.recycleviewdemo.decoration;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.support.v4.content.ContextCompat;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import com.zjh.administrat.recycleviewdemo.R;
public class CustomDecoration extends RecyclerView.ItemDecoration {
private Drawable mDivider;
public CustomDecoration(Context context) {
//在构造方法中,讲分割线的样子拿到
mDivider = ContextCompat.getDrawable(context, R.drawable.recycler_divider);
}
@Override
public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) {
//画垂直和水平的两种分割线
drawHorizontal(c, parent);
drawVertical(c, parent);
}
public void drawHorizontal(Canvas c, RecyclerView parent) {
int childCount = parent.getChildCount();
//拿到所有孩子
//根据孩子的坐标位置,计算我们的要画的分割线的位置,然后画
for (int i = 0; i < childCount; i++) {
final View child = parent.getChildAt(i);
final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child
.getLayoutParams();
final int left = child.getLeft() - params.leftMargin;
final int right = child.getRight() + params.rightMargin
+ mDivider.getIntrinsicWidth();
final int top = child.getBottom() + params.bottomMargin;
final int bottom = top + mDivider.getIntrinsicHeight();
mDivider.setBounds(left, top, right, bottom);
mDivider.draw(c);
}
}
public void drawVertical(Canvas c, RecyclerView parent) {
final int childCount = parent.getChildCount();
for (int i = 0; i < childCount; i++) {
final View child = parent.getChildAt(i);
final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child
.getLayoutParams();
final int top = child.getTop() - params.topMargin;
final int bottom = child.getBottom() + params.bottomMargin;
final int left = child.getRight() + params.rightMargin;
final int right = left + mDivider.getIntrinsicWidth();
mDivider.setBounds(left, top, right, bottom);
mDivider.draw(c);
}
}
@Override
public void getItemOffsets(Rect outRect, int itemPosition,
RecyclerView parent) {
outRect.set(0, 0, mDivider.getIntrinsicWidth(),
mDivider.getIntrinsicHeight());
}
}