RecycledView三种Linear,Grid,Staggered

GridActivity(其他类似)

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());
    }
}

activity_grid.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="5dp"
    tools:context=".grid.GridActivity">

    <android.support.v7.widget.RecyclerView
        android:id="@+id/recyclerView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="9"
        />

    <Button
        android:id="@+id/recycler_grid_add"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="ADD A SQUARE"
        android:textSize="30sp"
        android:background="#44dc"
        android:layout_weight="1"
        android:alpha="0.3"
        />


</LinearLayout>

item_grid_recycle.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="5dp"
    android:id="@+id/grid_Linear_layout"
    android:orientation="horizontal">

    <ImageView
        android:id="@+id/recycle_grid_image"
        android:layout_width="80dp"
        android:layout_height="80dp"
        android:src="@drawable/timg" />

    <TextView
        android:id="@+id/recycle_grid_text"
        android:layout_width="match_parent"
        android:layout_height="80dp"
        android:textSize="20sp"
        android:gravity="center"
        android:textColor="#f00"
        />

</LinearLayout>

drawable中shape.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">

    <!--画一个渐变色-->
    <gradient
        android:startColor="#f00f00"
        android:centerColor="#00f00f"
        android:endColor="#f00f"
        android:type="linear" />
    <size
        android:height="5dp"
        android:width="5dp"
        />
</shape>

线性网格流式

猜你喜欢

转载自blog.csdn.net/qq_43143422/article/details/84961366