RecyclerView瀑布流布局的实现
来源:互联网 发布:闪电战2mac版无限子弹 编辑:程序博客网 时间:2024/04/28 03:51
RecyclerView瀑布流布局的实现
RecyclerView是继ListView之后更强大的滚动控件,它可以轻松实现横向滚动,而ListView则不能.RecyclerView不仅轻松实现了和ListView同样的效果,还优化了ListView中存在的不足之处... 而且用RecyclerView可以实现瀑布流布局..
compile fileTree(include: ['*.jar'], dir: 'libs') androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { exclude group: 'com.android.support', module: 'support-annotations' }) compile 'com.android.support:appcompat-v7:25.3.1' compile 'com.android.support.constraint:constraint-layout:1.0.2' testCompile 'junit:junit:4.12' compile 'com.android.support:recyclerview-v7:25.3.1'
使用RecyclerView之前需要添加依赖 ,添加完毕之后就可以用了..
创建一个Activity,布局里面放一个单纯的RecyclerView..
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.subang.recyclerviewdemo.MainActivity" android:background="#00b2ff"> <android.support.v7.widget.RecyclerView android:id="@+id/recyclerView" android:layout_width="match_parent" android:layout_height="match_parent" /></RelativeLayout>
要用瀑布流来一些图片,接下来在mipmap中放入图片,然后在Valus下面的strings.xml中放入图片名字准备作为图片标记
方便在代码中取出来...
<resources> <string name="app_name">RecyclerViewDemo</string> <array name="iconsId"> <item>p1</item> <item>p2</item> <item>p3</item> <item>p4</item> <item>p5</item> <item>p6</item> <item>p7</item> <item>p8</item> <item>p9</item> <item>p10</item> <item>p11</item> <item>p12</item> <item>p13</item> <item>p14</item> <item>p15</item> <item>p16</item> <item>p17</item> <item>p18</item> <item>p19</item> <item>p20</item> <item>p21</item> <item>p22</item> <item>p23</item> <item>p24</item> <item>p25</item> <item>p26</item> <item>p27</item> <item>p28</item> <item>p29</item> <item>p30</item> </array> </resources>
可以看到我将要展示30张图片,p1-p30分别是图片的名字,然后就可以在代码中写了
MainActivity:
package com.example.subang.recyclerviewdemo;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.Rect;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 com.example.subang.adapters.RvImageAdapter;import java.util.ArrayList;import java.util.List;public class MainActivity extends AppCompatActivity { private RecyclerView recyclerView; private List<Integer> imagesId=new ArrayList<>(); private RvImageAdapter adapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //实例化控件 initView(); //数据源(图片) initData(); //适配器 initRecyclerView(); } private void initRecyclerView() { //设置瀑布流进行展示 recyclerView.setLayoutManager(new StaggeredGridLayoutManager( 3,StaggeredGridLayoutManager.VERTICAL)); //设置内部条目的边距(这里是图片的间距) recyclerView.addItemDecoration(new RecyclerView.ItemDecoration() { @Override public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) { outRect.set(10,10,10,10); } //给每一张图片画一个边框 (为了好看点..)调用onDraw方法 @Override public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) { super.onDraw(c, parent, state); Paint paint=new Paint(); paint.setColor(Color.YELLOW); paint.setStrokeWidth(5); paint.setAntiAlias(true); paint.setStyle(Paint.Style.STROKE); for (int i = 0; i < parent.getChildCount(); i++) { View view = parent.getChildAt(i); //绘制图片的边框 c.drawRect(view.getLeft()-1,view.getTop()-1,view.getRight()+1,view.getBottom()+1,paint); } } }); adapter=new RvImageAdapter(this,imagesId); recyclerView.setAdapter(adapter); } private void initData() { //将图片的标记取出来 得到一个数组 String[] icons = getResources().getStringArray(R.array.iconsId); for (int i = 0; i < icons.length; i++) { //遍历数组的到图片的id int id = getResources().getIdentifier(icons[i], "mipmap", getPackageName()); //添加到图片id集合中 然后将集合作为数据源传给适配器 imagesId.add(id); } } private void initView() { recyclerView= (RecyclerView) findViewById(R.id.recyclerView); }}
可以看到在实现了瀑布流之后,为了美观又调整了图片之间的距离,还给图片加了边框...
接下来就是适配器了:
package com.example.subang.adapters;import android.content.Context;import android.support.v7.widget.RecyclerView;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.ImageView;import com.example.subang.recyclerviewdemo.MainActivity;import com.example.subang.recyclerviewdemo.R;import java.util.List;/** * Created by SuBang on 2017/4/27. */public class RvImageAdapter extends RecyclerView.Adapter { private Context context; private List<Integer> imagesId; public RvImageAdapter(Context context, List<Integer> imagesId) { this.context = context; this.imagesId = imagesId; } //创建ViewHolder 返回值是一个ViewHolder 因此后面写了一个ViewHolder内部类 @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { RecyclerView.ViewHolder holder = null; View inflate = LayoutInflater.from(context).inflate(R.layout.item, parent, false); holder = new ImageViewHolder(inflate); return holder; } //绑定数据 @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { ((ImageViewHolder) holder).imageview.setImageResource(imagesId.get(position)); } @Override public int getItemCount() { return imagesId != null ? imagesId.size() : 0; } //在这个内部类中实例化ImageView private class ImageViewHolder extends RecyclerView.ViewHolder { private ImageView imageview; public ImageViewHolder(View itemView) { super(itemView); imageview = (ImageView) itemView.findViewById(R.id.imageview); } }}
到这里,一个瀑布流展示图片就结束了..
0 0
- RecyclerView瀑布流布局的实现
- RecyclerView实现瀑布流布局
- RecyclerView实现瀑布流布局
- RecyclerView实现瀑布流布局
- RecyclerView实现瀑布流布局
- RecyclerView实现瀑布流布局
- RecyclerView实现瀑布流布局
- RecyclerView实现瀑布流布局
- recyclerview实现瀑布流布局
- Recyclerview实现瀑布流布局及条目的点击事件
- 用RecyclerView的瀑布流布局实现表格展示
- 用RecyclerView实现瀑布流布局
- Android RecyclerView实现瀑布流布局
- 瀑布流布局的实现
- RecyclerView瀑布流布局模版
- 使用RecyclerView实现瀑布流布局(一)
- 使用RecyclerView实现瀑布流布局(二)
- RecyclerView 实现横向滚动与瀑布流布局
- 输出所有的水仙花数
- Visual Studio各版本区别
- Http 416错误
- SQLServer优化资料整理
- Java访问数据库的技术--JDBC
- RecyclerView瀑布流布局的实现
- spring-boot @ConfigurationProperties脑洞真大
- 使用SET命令修改用户密码
- NYOJ 973 天下第一 判断有没有环存在
- jQuery中attr和prop的区别
- HTML中的<select>标签如何设置默认选中的选项
- Linux基础学习之bash shell内置命令----type
- 大整数的4则运算
- POJ