Android RecyclerView(瀑布流)水平/垂直方向分割线
Android RecyclerView(瀑布流)水平/垂直方向分割线
Android RecyclerView不像过去的ListView那样随意的设置水平方向的分割线,如果要实现RecyclerView的水平/垂直分割线,则需要继承自RecyclerView.ItemDecoration重写getItemOffsets方法,从而增加水平/垂直分割线。
写一个例子。
MainActivity.java:
package zhangphil.app; import android.content.Context;
import android.graphics.Color;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.StaggeredGridLayoutManager;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView; public class MainActivity extends AppCompatActivity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); RecyclerView mRecyclerView = (RecyclerView) findViewById(R.id.recyclerView); // 两列
int spanCount = 2; // StaggeredGridLayoutManager管理RecyclerView的布局。
StaggeredGridLayoutManager mLayoutManager = new StaggeredGridLayoutManager(spanCount, StaggeredGridLayoutManager.VERTICAL);
mRecyclerView.setLayoutManager(mLayoutManager); //为RecyclerView增加分割线,水平和垂直方向都有。增加分割线值比如为32。
RecyclerViewItemDecoration decoration = new RecyclerViewItemDecoration(32);
mRecyclerView.addItemDecoration(decoration); RecyclerViewAdapter mAdapter = new RecyclerViewAdapter(this);
mRecyclerView.setAdapter(mAdapter);
} private class ItemViewHolder extends RecyclerView.ViewHolder {
private TextView text; public ItemViewHolder(View itemView) {
super(itemView);
text = (TextView) itemView.findViewById(android.R.id.text1);
text.setTextColor(Color.WHITE);
}
} public class RecyclerViewAdapter extends RecyclerView.Adapter<ItemViewHolder> {
private Context context; public RecyclerViewAdapter(Context context) {
super();
this.context = context;
} @Override
public ItemViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
View view = View.inflate(context, android.R.layout.simple_list_item_1, null);
view.setBackgroundColor(Color.RED);
ItemViewHolder holder = new ItemViewHolder(view);
return holder;
} @Override
public void onBindViewHolder(ItemViewHolder viewHolder, int pos) {
viewHolder.text.setText(String.valueOf(pos));
} @Override
public int getItemCount() {
return 15;
}
}
}
布局文件,很简单,就放一个RecyclerView,注意背景颜色的设置:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/holo_orange_light"> <android.support.v7.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent">
</android.support.v7.widget.RecyclerView> </RelativeLayout>
最关键的RecyclerViewItemDecoration.java:
package zhangphil.app; /**
* Created by Phil on 2016/10/8.
*/ import android.graphics.Rect;
import android.support.v7.widget.RecyclerView;
import android.view.View; /**
* 为RecyclerView增加间距
* 预设2列,如果是3列,则左右值不同
*/
public class RecyclerViewItemDecoration extends RecyclerView.ItemDecoration {
private int space = 0;
private int pos; public RecyclerViewItemDecoration(int space) {
this.space = space;
} @Override
public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) { outRect.top = space; //该View在整个RecyclerView中位置。
pos = parent.getChildAdapterPosition(view); //取模 //两列的左边一列
if (pos % 2 == 0) {
outRect.left = space;
outRect.right = space / 2;
} //两列的右边一列
if (pos % 2 == 1) {
outRect.left = space / 2;
outRect.right = space;
}
}
}
代码运行结果:
Android RecyclerView(瀑布流)水平/垂直方向分割线的更多相关文章
- Android RecyclerView 瀑布流
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout ...
- Android RecyclerView 瀑布流滑动到最后自动加载更多
mRecycleView.setOnScrollListener(new RecyclerView.OnScrollListener(){ //用来标记是否正在向最后一个滑动,既是否向下滑动 bool ...
- Android 解决RecyclerView瀑布流效果结合Glide使用时图片变形的问题
问题描述:使用Glide加载RecyclerView的Item中的图片,RecyclerView使用了瀑布流展示图片,但是滚动时图片会不断的加载,并且大小位置都会改变,造成显示错乱. 解决方法:使用瀑 ...
- Android不规则瀑布流照片墙的实现+LruCache算法
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZnJhbmNpc3NoaQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQk ...
- Android 实现瀑布流的两种思路
瀑布流怎么样我就不多介绍了.下面说说我想到的两个方法. 方法一,控件的叠加: ScrollView+LinearLayout.在ScrollView里面加一个水平方向的LinearLayout,在水平 ...
- 解决RecyclerView瀑布流效果结合Glide使用时图片变形的问题
问题描述:使用Glide加载RecyclerView的Item中的图片,RecyclerView使用了瀑布流展示图片,但是滚动时图片会不断的加载,并且大小位置都会改变,造成显示错乱. 解决方法:使用瀑 ...
- Android Studio [RecyclerView/瀑布流显示]
PuRecyclerViewActivity.java package com.xdw.a122.recyclerview; import android.support.v7.app.AppComp ...
- css 元素水平垂直方向居中
html部分 <div class="parent"> <div class="child"> - -居中- - </div> ...
- Android瀑布流优化,解决Recyclerview展示大批量图片时Item自动切换、闪烁、空白等问题
本文涉及的代码案例可以在下方的链接中找到,如果对你有帮助,请给个Star(#^.^#) https://github.com/CodeTillDoom/StaggeredRcl 问题分析 这段时间业务 ...
随机推荐
- Roman to Integer [LeetCode]
Given a roman numeral, convert it to an integer. Input is guaranteed to be within the range from 1 t ...
- (转)SqlServer将数据库中的表复制到另一个数据库
本文为转载地址为:http://jingyan.baidu.com/article/d5c4b52bc5c102da570dc547.html 复制表结构 在使用SqlServer的过程中,我们可能需 ...
- form程序的界面修改
做主题视频库的界面的修改工作,是b/s端的窗口,是由form窗口生成,如下截图: 主要有三个方面,1.左侧菜单栏宽度固定,不随整个窗口大变化而变化.2.导出excel按钮的位置的移动,不管整个窗口是变 ...
- HDU 3466
Proud Merchants Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Others) ...
- jQuery学习小结3——AJAX
一.jQuery的Ajax方法 jQuery对Ajax 做了大量的封装,使用起来也较为方便,不需要去考虑浏览器兼容性.对于封装的方式,jQuery 采用了三层封装: 最底层的封装方法为——$.ajax ...
- poi 读取 excel(.xlsx) 2007及以上版本
1.注意的一点是sh.getLastRowNum(),比实际的行数少一行 涉及到的包:
- Java多线程-新特性-有返回值的线程
在Java5之前,线程是没有返回值的,常常为了“有”返回值,破费周折,而且代码很不好写.或者干脆绕过这道坎,走别的路了. 现在Java终于有可返回值的任务(也可以叫做线程)了. 可返回值的任务必须实现 ...
- MySQL 命令杂记
mysql> show processlist; 如果是root帐号,你能看到所有用户的当前连接.如果是其它普通帐号,只能看到自己占用的连接.show processlist;只列出前100条, ...
- PMP项目管理笔记 项目定义
项目的定义 项目是为创造独特的产品,服务或成果而进行临时性的工作. 项目是组织的经营需要与战略目标服务的. PMBOK 指南描述的项目管理知识,从本质上讲,是用来管理中等或以上规模,跨部门,跨专业的目 ...
- java之socket
socket系java中网络编程的内容. 1客户端: package com.wtd.socket; import java.io.BufferedReader; import java.io.IOE ...