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;@Overrideprotected 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);}//设置AdapterrecyclerView.setAdapter(mAdapter);CustomDecoration customDecoration = new CustomDecoration(this);recyclerView.addItemDecoration(customDecoration);//设置动画recyclerView.setItemAnimator(new DefaultItemAnimator());//添加数据findViewById(R.id.recycler_grid_add).setOnClickListener(new View.OnClickListener() {@Overridepublic 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() {@Overridepublic void OnClick(int i) {Toast.makeText(GridActivity.this, ""+i, Toast.LENGTH_SHORT).show();}@Overridepublic 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@Overridepublic 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);}@Overridepublic 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() {@Overridepublic void onClick(View v) {if (mClick != null){mClick.OnClick(i);}}});//长按长按-------------viewHolder.linearLayout.setOnLongClickListener(new View.OnLongClickListener() {@Overridepublic boolean onLongClick(View v) {if(mClick != null){mClick.OnLongClick(i);}return true;}});}@Overridepublic 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);}@Overridepublic 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);}}@Overridepublic 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"?>
<LinearLayoutxmlns: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.RecyclerViewandroid:id="@+id/recyclerView"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_weight="9"/><Buttonandroid: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"?>
<LinearLayoutxmlns: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"><ImageViewandroid:id="@+id/recycle_grid_image"android:layout_width="80dp"android:layout_height="80dp"android:src="@drawable/timg" /><TextViewandroid: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"><!--画一个渐变色--><gradientandroid:startColor="#f00f00"android:centerColor="#00f00f"android:endColor="#f00f"android:type="linear" /><sizeandroid:height="5dp"android:width="5dp"/>
</shape>

RecycledView三种Linear,Grid,Staggered相关推荐

  1. Stackelberg博弈问题双层模型转化为MPEC模型的三种方法

    Stackelberg博弈问题双层模型转化为MPEC模型的三种方法 Stackelberg博弈问题的求解可以利用模型转换将下层问题以约束集的形式添加到上层优化中的三种方法. 1.构造 KKT条件 在进 ...

  2. oracle 授权 增删改查权限_linux suid,sgid,sticky-bit三种特殊权限简介

    三种特殊权限简介 SUID 当一个设置了SUID 位的可执行文件被执行时,该文件将以所有者的身份运行,也就是说无论谁来执行这个文件,他都有文件所有者的特权. 如果所有者是 root 的话,那么执行人就 ...

  3. 时序预测的三种方式:统计学模型、机器学习、循环神经网络

    作者 | luanhz 来源 | 小数志 导读 时序预测是一类经典的问题,在学术界和工业界都有着广泛的研究和应用.甚至说,世间万物加上时间维度后都可抽象为时间序列问题,例如股票价格.天气变化等等.关于 ...

  4. 三种方式实现圣杯布局

    圣杯布局的三种实现 圣杯布局是一种很常见的css布局.他要求: 上部和下部各自占领屏幕所有宽度. 上下部之间的部分是一个三栏布局. 三栏布局两侧宽度不变,中间部分自动填充整个区域. 中间部分的高度是三 ...

  5. Hadoop三种安装模式

    2019独角兽企业重金招聘Python工程师标准>>> Hadoop三种安装模式:单机模式,伪分布式,真正分布式 一 单机模式standalone 单机模式是Hadoop的默认模式. ...

  6. 使用OpenCV进行人脸识别的三种方法

    1 简介 OpenCV从版本2.4开始,加入了一个类FaceRecognizer,使用它可以方便的地进行人脸识别(源代码,在OpenCV的opencv\modules\contrib\doc\face ...

  7. ML之SVM(三种):基于三种SVM(linearSVR、polySVR、RBFSVR)对Boston(波士顿房价)数据集(506,13+1)进行价格回归预测并对比各自性能

    ML之SVM(三种):基于三种SVM(linearSVR.polySVR.RBFSVR)对Boston(波士顿房价)数据集(506,13+1)进行价格回归预测并对比各自性能 目录 输出结果 设计思路 ...

  8. 可视化篇(四)——— python绘制双y轴、箱线图、概率分布三种图形及案例

    可视化篇(四)--- python绘制双y轴.箱线图.概率分布三种图形及案例 摘要 绘制双y轴图形 绘制箱线图 绘制概率分布图 摘要 本文演示了如何通过python绘制双y轴.箱线图.概率分布三种图形 ...

  9. OO实现ALV TABLE 二:ALV显示的三种形式

    一般的ALV有三种显示形式,分别为 一.普通的List 二.全屏的Grid 三.在自定义屏幕的显示的Grid 跟以往实现这三种ALV显示方式相比,以往的三种显示方式分别是调用不同的Function和C ...

最新文章

  1. Yolo:实时目标检测实战(下)
  2. 机器学习中四种调参方法总结
  3. OpenCV DNN支持的对象检测模型
  4. HDU 5528 Count a * b
  5. jzoj3410-[GDOI2014模拟]Tree【最小生成树,贪心】
  6. python怎么打开一个窗口_python – 使按钮一次只打开一个窗口(通过关闭Toplevel窗口启用按钮)...
  7. jqueryvar语句_你真的掌握变量和类型了吗
  8. 谈谈以前那位研发总监的工作
  9. Linux vmstat命令详解
  10. Matlab实现图像识别(八)
  11. Github上的一些优秀的知识图谱项目*
  12. 电子商务网络购物平台实例运营分析+电子商务概述及阿里巴巴集团模式五大核心内容[连载之电子商务网络营销]...
  13. 贪吃蛇的纯C语言实现过程
  14. Java并发Future
  15. 手把手教你通过vue-cli搭建手机端框架
  16. 08-ES搜索结果处理
  17. GDOI2007模拟-打鼹鼠
  18. xfs和ext4文件系统大小调整
  19. 【VBA研究】再论取EXCEL有效行列数方法
  20. 智慧建筑 的破题立意心得

热门文章

  1. 新正方教务管理系统的爬虫webApi-Django(带后台)-用以开发校园APP/小程序
  2. 计算机科学与技术为什么叫cs,cs是什么专业的简称
  3. 51单片机 独立按键控制LED 实现的三人表决器
  4. 如何ping通带端口的网址
  5. node-gyp 报错
  6. linux查看端口及端口详解
  7. 多商户商城小程序源码开发需具备哪些功能?
  8. mac vscode 配置php跳转
  9. 微信JS-SDK 分享到朋友圈 分享给朋友 分享到QQ 拍照或从手机相册中选图 识别音频并返回识别结果 使用微信内置地图查看位置
  10. 中国高频变频器及压缩机类负载应用市场发展态势及十si五战略规划建议报告2021-2027年