zoukankan      html  css  js  c++  java
  • RecycleView和CardView

    一、RecycleView

    1. <android.support.v7.widget.RecyclerView
    2. android:id="@+id/my_recycler_view"
    3. android:layout_width="match_parent"
    4. android:layout_height="match_parent"
    5. android:scrollbars="vertical"/>
    三个关键要素
    LayoutManager 线性布局(LinearLayoutManager) Gird布局(GridLayoutManager) 瀑布流布局(StaggeredGridLayoutManager)
    Adapter RecyclerView.Adapter<T> T为继承ViewHolder的实现类
    Dataset RecyclerView.ViewHolder
    recyclerView的条目点击事件需要自己写接口去处理。
     
    其它补充知识
    recycleView有预加载机制(系统只将屏幕可见范围之内的元素保存在内存中),当第一个Item的高度占据了屏幕时,也就是屏幕内此时只有一个Item,那么在加载下一个Item时会出现卡顿现象,因为内存中不存在可利用的Item,需要去新创建一个Item,造成卡顿。
    解决办法,若使用的是LinearLayoutManager,只需重写getExtraLayoutSpace()方法(将返回LayoutManager应该预留的额外空间(显示范围之外,应该额外缓存的空间))。
    1. 1 LinearLayoutManager linearLayoutManager =newLinearLayoutManager(this){
      2 @Override
      3 protectedint getExtraLayoutSpace(RecyclerView.State state){
      4 return300;
      5 }
      6 };

      具体步骤

    1. //创建默认的线性LayoutManager
    2. mLayoutManager =newLinearLayoutManager(this);
    3. //设置recycleView的方向为横向
    4. //mLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
    5. mRecyclerView.setLayoutManager(mLayoutManager);
    6. //如果可以确定每个item的高度是固定的,设置这个选项可以提高性能
    7. mRecyclerView.setHasFixedSize(true);
    8. //创建并设置Adapter
    9. adapter =new rlAdapter();
    10. mRecyclerView.setAdapter(adapter);
    11. //处理条目点击事件
          adapter.setOnItemClickListener(new rlAdapter.OnRcvItemClickListener(){
    @Override
    publicvoid onItemClick(View view,int position){
    Toast.makeText(MainActivity.this,"当前点击的是第:"+position +"个条目",Toast.LENGTH_SHORT).show();
    }
    });
     1 staticclass rlAdapter extendsRecyclerView.Adapter<RlViewHolder>implementsView.OnClickListener{
     2 
     3 //定义接口,处理Item的点击事件
     4 publicstaticinterfaceOnRcvItemClickListener{
     5 void onItemClick(View view,int position);
     6 }
     7 privateOnRcvItemClickListener itemClickListener ;
     8 publicvoid setOnItemClickListener(OnRcvItemClickListener itemClickListener){
     9 this.itemClickListener = itemClickListener;
    10 }
    11 @Override
    12 publicRlViewHolder onCreateViewHolder(ViewGroup viewGroup,int i){
    13 View view =View.inflate(viewGroup.getContext(),R.layout.item_listview,null);
    14  view.setOnClickListener(this);
    15 returnnewRlViewHolder(view);
    16 }
    17 
    18 @Override
    19 publicvoid onBindViewHolder(RlViewHolder rlViewHolder,int position){
    20  rlViewHolder.iv.setImageResource(arrs[position%5]);
    21  rlViewHolder.tv.setText("测试:"+position%5);
    22 //将数据保存到itemView中
    23 rlViewHolder.itemView.setTag(position);
    24 }
    25 @Override
    26 publicint getItemCount(){
    27 return100;
    28 }
    29 
    30 @Override
    31 publicvoid onClick(View v){
    32 if(itemClickListener !=null){
    33  itemClickListener.onItemClick(v,(Integer) v.getTag());
    34 }
    35 }
    36 }
    37 
    38 staticclassRlViewHolderextendsRecyclerView.ViewHolder{
    39 ImageView iv;
    40 TextView tv;
    41 
    42 publicRlViewHolder(View itemView){
    43 super(itemView);
    44  iv =(ImageView) itemView.findViewById(R.id.iv);
    45  tv =(TextView) itemView.findViewById(R.id.tv);
    46 }
    47 }

    二、CardView

    CardView继承自FrameLayout类,可以包含圆角和阴影。
    通过使用android:elevation属性,创建一个阴影的卡片

    1、xml中使用android:cardCornerRadius属性指定圆角半径

    2、代码中使用CardView.setRadius 设置圆角半径

    3、使用 android:cardBackgroundColor属性设置卡片颜色

    4、代码中使用CardView.setBackgroundColor设置卡片颜色,可能会影响卡片的阴影

     

  • 相关阅读:
    Python 元胞自动机模拟——生命游戏
    ()python画动态图——plt.ion动图使用,训练过程展示
    Python——因子分析(KMO检验和Bartlett's球形检验)
    bind(),unbind(),hover(),toggle(),animate()
    多计算机通信中的时间同步问题
    如何创建自定义尺寸的空白地图
    ROS中的珊格地图——nav_msgs::OccupancyGrid
    c++使用eigen库,矩阵维度错误
    Eigen 求最小二乘
    Mybatis 框架下 SQL 注入攻击的 3 种方式,真是防不胜防!
  • 原文地址:https://www.cnblogs.com/cczheng-666/p/4997920.html
Copyright © 2011-2022 走看看