今天使用了V7包加入的RecycleView 和 CardView,写篇简析。

先上效果图:

原理图:

这是RecycleView的工作原理:

1.LayoutManager用来处理RecycleView的“列表”样式,Support包默认包含了:LinearLayoutManager  横向或纵向的滚动列表、

GridLayoutManager  网格列表、StaggeredGridLayoutManager  交错的网格列表。

2.Adapter负责处理RecycleView的数据和样式

3.在传统的ListView中有一种常见的写法是使用ViewHolder来缓存数据集,在新版的RecycleView内置了ViewHolder这一模块,所以在Adapter内部新建内部类ViewHolder。

4.RecycleView 和listView的一个区别就是本身不处理点击事件,点击事件应该绑在ViewHolder里面,可以直接写也可以通过接口绑在Adapter里面来实现。

首先添加数据集:

package com.lfk.drawapictiure.Info;

/**
* Created by liufengkai on 15/9/13.
*/
public class MenuInfo {
private String paint_name;
private String paint_time;
private String paint_root;
private String paint_img_root; public MenuInfo(String paint_name, String paint_time,
String paint_root, String paint_img_root) {
this.paint_name = paint_name;
this.paint_time = paint_time;
this.paint_root = paint_root;
this.paint_img_root = paint_img_root;
} public String getPaint_name() {
return paint_name;
} public String getPaint_time() {
return paint_time;
} public String getPaint_root() {
return paint_root;
} public String getPaint_img_root() {
return paint_img_root;
}
}

实现继承自RecycleView的Adapter中间要包裹自己实现的ViewHolder,onCreateviewHolder函数和onBindViewHolder实现了ListView里面getView的工作,分别为找到控件和控件赋值,

实现点击的接口,设置接口并且绑在ViewHolder的itemView里面即根视图中

public class MainLayoutAdapter extends RecyclerView.Adapter<MainLayoutAdapter.MainViewHolder> {
private LayoutInflater inflater;
private ArrayList<MenuInfo> userList;
private Context context;
private MainItemClickListener itemClickListener; public MainLayoutAdapter(ArrayList<MenuInfo> userList, Context context) {
this.userList = userList;
this.context = context;
this.inflater = LayoutInflater.from(context);
} public void setItemClickListener(MainItemClickListener itemClickListener) {
this.itemClickListener = itemClickListener;
}
  //onCreateviewHolder函数和onBindViewHolder实现了ListView里面getView的工作,分别为找到控件和控件赋值
@Override
public MainLayoutAdapter.MainViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View wrapper = inflater.inflate(R.layout.draw_item, parent, false);
return new MainViewHolder(
wrapper,
(TextView)wrapper.findViewById(R.id.paint_name),
(TextView)wrapper.findViewById(R.id.paint_time),
(TextView)wrapper.findViewById(R.id.paint_root),
(ImageView)wrapper.findViewById(R.id.paint_img));
} @Override
public void onBindViewHolder(MainViewHolder holder, int position) {
MenuInfo menuInfo = userList.get(position);
holder.paint_img.setImageURI(Uri.parse(menuInfo.getPaint_img_root()));
holder.paint_name.setText(menuInfo.getPaint_name());
holder.paint_time.setText(menuInfo.getPaint_time());
holder.paint_root.setText(menuInfo.getPaint_root());
} @Override
public int getItemCount() {
return userList.size();
} public class MainViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener,View.OnLongClickListener{
private TextView paint_name;
private TextView paint_time;
private TextView paint_root;
private ImageView paint_img;
public MainViewHolder(View itemView, TextView paint_name,
TextView paint_time, TextView paint_root,
ImageView paint_img) {
super(itemView);
itemView.setOnClickListener(this);
this.paint_name = paint_name;
this.paint_time = paint_time;
this.paint_root = paint_root;
this.paint_img = paint_img;
} @Override
public void onClick(View view) {
MenuInfo menuInfo = userList.get(getAdapterPosition());
itemClickListener.onItemClick(view,menuInfo.getPaint_name(),menuInfo.getPaint_root());
} @Override
public boolean onLongClick(View view) {
return false;
}
}
}

Activity中的使用:

package com.lfk.drawapictiure.Fragment;

import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup; import com.lfk.drawapictiure.Adapter.MainLayoutAdapter;
import com.lfk.drawapictiure.Info.MenuInfo;
import com.lfk.drawapictiure.InterFace.MainItemClickListener;
import com.lfk.drawapictiure.MainActivity;
import com.lfk.drawapictiure.R; import java.util.ArrayList; public class PaintFragment extends android.support.v4.app.Fragment {
private RecyclerView mRecyclerView;
private MainLayoutAdapter mAdapter;
private RecyclerView.LayoutManager mLayoutManager;
private String path = Environment.getExternalStorageDirectory().getPath() + "/DrawAPicture"; public static PaintFragment newInstance() {
return new PaintFragment();
} public PaintFragment() {
// Required empty public constructor
} @Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); } @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View wrapper = inflater.inflate(R.layout.fragment_paint, container, false);
mRecyclerView = (RecyclerView)wrapper.findViewById(R.id.paint_recycle_view);
mLayoutManager = new LinearLayoutManager(getActivity());
mRecyclerView.setLayoutManager(mLayoutManager); //绑上列表管理器
ArrayList<MenuInfo> arrayList = new ArrayList<>();
arrayList.add(new MenuInfo("刘丰恺","09-13 05:28",path+"/"+"12138.lfk",path+"/"+"6826.jpg"));
arrayList.add(new MenuInfo("刘丰恺","09-13 05:28",path+"/"+"12138.lfk",path+"/"+"6826.jpg"));
arrayList.add(new MenuInfo("刘丰恺","09-13 05:28",path+"/"+"12138.lfk",path+"/"+"6826.jpg"));
arrayList.add(new MenuInfo("刘丰恺","09-13 05:28",path+"/"+"12138.lfk",path+"/"+"6826.jpg"));
mAdapter = new MainLayoutAdapter(arrayList, getActivity());
      // 设置点击事件
mAdapter.setItemClickListener(new MainItemClickListener() {
@Override
public void onItemClick(View view, String name, String path) {
Intent intent = new Intent(getActivity(), MainActivity.class);
intent.setData(Uri.parse(path));
startActivity(intent);
}
});
      //绑定数据集
mRecyclerView.setAdapter(mAdapter); return wrapper;
} }

其中的子布局使用了CardView:

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:card_view="http://schemas.android.com/apk/res-auto"
android:background="@drawable/list_item_selector"
android:layout_width="match_parent"
android:layout_height="wrap_content"
card_view:cardCornerRadius="4dp"
    card_view:
android:layout_margin="@dimen/card_margin">
<RelativeLayout
android:layout_marginTop="16dp"
android:layout_marginLeft="16dp"
android:layout_marginRight="16dp"
android:layout_marginBottom="16dp"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageView
android:maxHeight="100dp"
android:layout_marginTop="8dp"
android:layout_below="@+id/line_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/paint_img"
android:src="@mipmap/ic_launcher" />
<TextView
android:id="@+id/paint_name"
android:textColor="#000"
android:textSize="18sp"
android:text="项目名"
android:layout_alignParentRight="true"
android:singleLine="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/paint_time"
android:text="项目时间"
android:textColor="@color/black"
android:textSize="18sp"
android:singleLine="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<View
android:id="@+id/line_view"
android:background="@color/gray"
android:layout_below="@+id/paint_time"
android:layout_width="match_parent"
android:layout_height="1dp"/>
<TextView
android:id="@+id/paint_root"
android:visibility="invisible"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</RelativeLayout> </android.support.v7.widget.CardView>

我设置的东西只有:

card_view:cardCornerRadius="4dp"  //设定圆角半径

card_view:cardElevation="8dp"//设定阴影

Android RecycleView + CardView 控件简析的更多相关文章

  1. RecycleView + CardView 控件简析

    今天使用了V7包加入的RecycleView 和 CardView,写篇简析. 先上效果图: 原理图: 这是RecycleView的工作原理: 1.LayoutManager用来处理RecycleVi ...

  2. Flutter样式和布局控件简析(二)

    开始 继续接着分析Flutter相关的样式和布局控件,但是这次内容难度感觉比较高,怕有分析不到位的地方,所以这次仅仅当做一个参考,大家最好可以自己阅读一下代码,应该会有更深的体会. Sliver布局 ...

  3. [Android] Android 卡片式控件CardView的优雅使用

    [Android] Android 卡片式控件CardView的优雅使用 CardView是在安卓5.0提出的卡片式控件 其具体用法如下: 1.在app/build.gradle 文件中添加 comp ...

  4. 【转】Android M新控件之FloatingActionButton,TextInputLayout,Snackbar,TabLayout的使用

    Android M新控件之FloatingActionButton,TextInputLayout,Snackbar,TabLayout的使用 分类: Android UI2015-06-15 16: ...

  5. 介绍三个Android支持库控件:TabLayout+ViewPager+RecyclerView

    本文主要介绍如下三个Android支持库控件的配合使用: TabLayout:android.support.design.widget.TabLayout ViewPager:android.sup ...

  6. Android笔记---常用控件以及用法

    这篇文章主要记录下Android的常用控件以及使用的方法,Android 给我们提供了大量的UI控件,合理地使用这些控件就可以非常轻松地编写出相当不错的界面,这些是Android学习的基础,没有什么业 ...

  7. Android 中常见控件的介绍和使用

    1 TextView文本框 1.1 TextView类的结构 TextView 是用于显示字符串的组件,对于用户来说就是屏幕中一块用于显示文本的区域.TextView类的层次关系如下: java.la ...

  8. Android中ListView控件的使用

    Android中ListView控件的使用 ListView展示数据的原理 在Android中,其实ListView就相当于web中的jsp,Adapter是适配器,它就相当于web中的Servlet ...

  9. 五、Android学习第四天补充——Android的常用控件(转)

    (转自:http://wenku.baidu.com/view/af39b3164431b90d6c85c72f.html) 五.Android学习第四天补充——Android的常用控件 熟悉常用的A ...

随机推荐

  1. mysql5.6 通用二进制安装

    mysql5.6 通用二进制安装: #卸载原有的mysqlyum remove mysql*ls /etc/my.cnf*mv /etc/my.cnf* /tmp/ #安装依赖包yum install ...

  2. 命令行安装KVM

    查看libvirtd的状态: [root@super67 ~]# /etc/init.d/libvirtd status libvirtd (pid  2503) is running... 安装vn ...

  3. new NABCD

    小组名称: 天天向上 项目名称:连连看 小组成员:王森(组长).胡丽娜.林莉.张政.张金生 新NABCD模型 N(需求) 传统的连连看有许多,玩法单一,感觉没意思,用户更希望连连看游戏增加更多的与众不 ...

  4. Apache Spark源码走读之7 -- Standalone部署方式分析

    欢迎转载,转载请注明出处,徽沪一郎. 楔子 在Spark源码走读系列之2中曾经提到Spark能以Standalone的方式来运行cluster,但没有对Application的提交与具体运行流程做详细 ...

  5. 算法与数据结构题目的 PHP 实现:栈和队列 设计一个有 getMin 功能的栈

    刚入手了一本<程序员代码面试指南>,书中题目的代码都是 Java 实现的,琢磨着把这些代码用 PHP 敲一遍,加深印象. 题目:设计一个有 getMin 功能的栈 —— 实现一个特殊的栈, ...

  6. php获取某年某月的天数 【转】

    function days_in_month($month, $year) { // calculate number of days in a month return $month == 2 ? ...

  7. Python常用函数笔记

    1.lambda lambda其实就是一条语句,lambda(x):body.x是lambda函数的参数,参数可以有任意多个(包括可选参数);body是函数体,只能是一个表达式,并且直接返回该表达式的 ...

  8. PHP防止用户重复提交表单

    我们提交表单的时候,不能忽视的一个限制是防止用户重复提交表单,因为有可能用户连续点击了提交按钮或者是攻击者恶意提交数据,那么我们在提交数据后的处理如修改或添加数据到数据库时就会惹上麻烦. 那么如何规避 ...

  9. linux下svn的co如何排除目录

    某些原因想在svn co的时候排除某些目录,可以绕个圈子,分三步来完成: co外层目录: svn checkout --depth empty $URL [$LOCATION] 完成之后,会有一个只包 ...

  10. MySQL字段之集合(set)枚举(enum)

    MySQL字段之集合(set)枚举(enum) (2008-12-23 13:51:23) 标签:it  分类:MySQL 集合 SET mysql> create table jihe(f1 ...