使用RecyclerView展示瀑布流的效果
来源:互联网 发布:高尔夫7原厂轮毂数据 编辑:程序博客网 时间:2024/05/21 11:09
第一步:
关联库文件:
第二步:布局.xml
<android.support.v7.widget.RecyclerView android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/recyler_view"> </android.support.v7.widget.RecyclerView>
第三步:在主类中初始化控件
//查找我们的控件函数
private void initView() {
mRecyclerView = (RecyclerView) findViewById(R.id.recyler_view);
}
第四步:在主类中通过方法,添加一个menu菜单选项,效果如下:
方法: //加载一个menu菜单 @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.activity_menu,menu); return true; } //菜单按钮点击事件处理函数 @Override public boolean onOptionsItemSelected(MenuItem item) { int itemId=item.getItemId(); //E staggered显示 if (itemId==R.id.action_staggered_normal){ //标准显示 loadstaggeredDate(false,true); //自定义的一个bean类 return true; }// B 垂直反向显示 else if (itemId==R.id.action_staggered_normal_reverse){ loadstaggeredDate(true,true); }// C 水平标准显示 else if (itemId==R.id.action_staggered_horizontal){ loadstaggeredDate(false,false); }// D 水平反向显示 else if (itemId==R.id.action_staggered_horizontal_reverse){ loadstaggeredDate(true,false); } return super.onOptionsItemSelected(item); }
loadstaggeredDate函数:
//E RecyclerView实现瀑布流的效果,实际就是布局管理器参数改为StaggeredGridLayoutManger private void loadstaggeredDate(Boolean isversion,Boolean orientation) { //创建一个集合,泛型是DetaBean ArrayList<DateBean> dates=new ArrayList<>(); //给Bean类放数据,最后把装好数据的Bean类放到集合里面!! int t = 0; for(int x=0; x< 35; x++){ //创建Bean类对象 DateBean dateBean=new DateBean(); //DateBean是一个Bean类!! if (x < image.length){ dateBean.icon=image[x]; }else { if (t<image.length){ dateBean.icon=image[t++]; }else { t=0; } } dateBean.name="wsw你好"+x; //把Bean类放入集合 dates.add(dateBean); } //创建适配器对象 参数一般有两个,上下文和数据加载集合 RecyclerViewStaggeredGridAdapter recyclerViewStaggeredGridAdapter = new RecyclerViewStaggeredGridAdapter(this, dates); // 1 设置适配器 mRecyclerView.setAdapter(recyclerViewStaggeredGridAdapter); //E 布局管理器所需要的参数 参数1 规定显示几列 参数2 指定item排列方式 StaggeredGridLayoutManager staggeredGridLayoutManager = new StaggeredGridLayoutManager(2, orientation ? StaggeredGridLayoutManager.VERTICAL : StaggeredGridLayoutManager.HORIZONTAL); //通过布局管理器可以控制条目排列顺序 true:方向 false:正常显示 staggeredGridLayoutManager.setReverseLayout(isversion); //2 设置布局管理器,参数GridLayoutManager,可以使 mRecyclerView.setLayoutManager(staggeredGridLayoutManager); }
RecyclerViewStaggeredGridAdapter是我们自定义的适配器类,就是为了展示listview效果
// 提示:RecyclerViewStaggeredGridAdapter和RecyclerViewGridAdapter相比,代码一样,就是改了item的布局//RecyclerView 的适配器,注意指定泛型,一般我们就是类型的ViewHolder继承ViewHolder(内部已经实现了优化)public class RecyclerViewStaggeredGridAdapter extends RecyclerView.Adapter<RecyclerViewStaggeredGridAdapter.StaggeredGridViewHolder> { private Context mContext; //泛型是RecylerView所需的Bean类 private List<DateBean> mDateBeen; //构造方法,一般需要接受两个参数,上下文,集合对象(包含我们所需要的数据) public RecyclerViewStaggeredGridAdapter(Context context, ArrayList<DateBean> dates) { mContext = context; mDateBeen = dates; } //创建ViewHolder也就是说创建出来一条,并把ViewHolder(item)返回出去 @Override public StaggeredGridViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { //转换一个View布局对象,决定了item的样子, 参数1:上下文 2. xml布局对象 3.为null View view = View.inflate(mContext, R.layout.activity_staggeredgridview, null); //创建一个ViewHolder对象 StaggeredGridViewHolder StaggeredGridViewHolder = new StaggeredGridViewHolder(view); //把ViewHolder对象传出去 return StaggeredGridViewHolder; } @Override public void onBindViewHolder(StaggeredGridViewHolder holder, int position) { //从集合里拿对应item的数据对象 DateBean dateBean = mDateBeen.get(position); //给holder里面的控件对象设置数据 holder.setData(dateBean); } @Override public int getItemCount() { //数据不为null,有几条数据就显示几条数据 if (mDateBeen != null && mDateBeen.size() > 0) { return mDateBeen.size(); } return 0; } public class StaggeredGridViewHolder extends RecyclerView.ViewHolder { private final ImageView mIvIcon; private final TextView mTvName; public StaggeredGridViewHolder(View itemView) { super(itemView); mIvIcon = (ImageView) itemView.findViewById(R.id.item_staggered_iv_icon); mTvName = (TextView) itemView.findViewById(R.id.item_staggered_tv_icon); } public void setData(DateBean data) { //给imageView设置图片 mIvIcon.setImageResource(data.icon); //给TextView设置文本 mTvName.setText(data.name); } }}
activity_staggeredgridview.xml代码如下:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:gravity="center" android:layout_width="match_parent" android:layout_height="wrap_content"> <ImageView android:adjustViewBounds="true" android:layout_width="wrap_content" android:layout_height="wrap_content" android:scaleType="centerInside" android:id="@+id/item_staggered_iv_icon" /> <TextView android:id="@+id/item_staggered_tv_icon" android:layout_width="0dp" android:layout_height="0dp" android:textSize="20sp" android:textStyle="bold" android:text="图片描述" /></RelativeLayout>
效果展示:
0 0
- 使用RecyclerView展示瀑布流的效果
- RecyclerView分别展示ListView,GrideView,瀑布流效果之总结
- RecyclerView的简单使用以及实现瀑布流效果
- 5.使用RecyclerView优雅的实现瀑布流效果
- 使用RecyclerView实现瀑布流效果
- Recyclerview 瀑布流效果
- RecyclerView瀑布流展示数据
- RecyclerView的简单瀑布流效果
- RecyclerView实现瀑布流的效果
- RecyclerView 实现瀑布流效果
- RecyclerView实现瀑布流效果
- Android RecyclerView瀑布流展示(OkHttp协议)
- 使用RecyclerView展示GrideView效果
- RecyclerView高仿IOS照片瀑布流式展示图片效果
- Android RecyclerView 的基本使用--瀑布流
- RecyclerView的瀑布流
- RecyclerView采用StaggeredGridLayoutManager布局的瀑布流效果
- RecyclerView的瀑布流制作热门搜索效果
- jQuery Mobile页面加载机制及页面跳转出现的问题
- Spring 查找hibernate映射文件:mappingResources、mappingLocations、mappingDirectoryLocations与mappingJarLocatio
- 游戏开发完整学习路线
- thinkphp表单令牌防止重复提交
- 函数的默认实参
- 使用RecyclerView展示瀑布流的效果
- uboot下init_sequence_f函数之copy_uboot_to_ram
- synchronized同步代码块
- Android 内存溢出与内存泄漏的简单分析与解决
- SecureRandom生成“强随机数”用于生成RSA*公钥/私钥*window和linux下不一致的问题
- DMA驱动框架流程编写
- 第十六、Java之清除数组中指定的某元素
- MySQL的事务处理以及隔离级别
- 反射(reflect)、内省(introspector)以及BeanUtils框架