先贴效果图

添加依赖:

RecyclerView 和 CardView都是在Android 5.0中引入的,所以需要在build.gradle中添加:

dependencies {    implementation 'com.android.support:cardview-v7:29.1.1'    implementation 'com.android.support:appcompat-v7:29.+'}

RecyclerView相当于一个更强大,更高效的ListView,既然是列表,所以它里面的实现方式和ListView差不多,一个(含有RecyclerView)主界面布局(activity_main.xml),一个Adapter(MyAdapter.java),一个样式布局(card_item.xml)

新建样式布局card_item.xml

CardView 继承自 FrameLayout,并在其基础上添加了圆角和阴影等效果。Google用一句话介绍了CardView:一个带圆角和阴影背景的FrameLayout。

<?xml version="1.0" encoding="utf-8"?>        

定义数据类

新建一个ContactInfo类

ContactInfo.java
package com.yangmouren.taskcardview;import android.graphics.drawable.Icon;import android.media.Image;/** * @author 杨某人 */public class ContactInfo {    protected String text;    protected int imgId;    public ContactInfo(String text,int imgId){        this.text = text;        this.imgId = imgId;    }    public String getText(){        return text;    }    public int getImgId() {        return imgId;    }}

创建适配器MyAdapter

MyAdapter.java

package com.yangmouren.taskcardview;import android.content.Context;import android.graphics.drawable.Drawable;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.ImageView;import android.widget.TextView;import androidx.annotation.NonNull;import androidx.cardview.widget.CardView;import androidx.recyclerview.widget.RecyclerView;import java.util.List;/** * @author 杨某人 */public class MyAdapter extends RecyclerView.Adapter {    private List contactInfoList;    private LayoutInflater mInflater;    public MyAdapter(List contactInfoList){        this.contactInfoList = contactInfoList;    }//    重写构造方法    @NonNull    @Override    public MyAdapter.ContactViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {        View itemView = LayoutInflater.from(parent.getContext())                .inflate(R.layout.card_item,parent,false);        return new ContactViewHolder(itemView);    }    @Override    public void onBindViewHolder(@NonNull MyAdapter.ContactViewHolder holder, int position) {        //contactInfoList中包含的都是ContactInfo类的对象        //通过其get()方法可以获得其中的对象        ContactInfo ci =contactInfoList.get(position);        holder.item_tv.setText(ci.getText());        holder.item_iv.setImageResource(ci.getImgId());    }    @Override    public int getItemCount() {        return contactInfoList.size();    }    class ContactViewHolder extends RecyclerView.ViewHolder{        private ImageView item_iv;        private TextView item_tv;        private CardView item_cardview;        public ContactViewHolder(@NonNull View itemView) {            super(itemView);            item_cardview = itemView.findViewById(R.id.item_cardview);            item_iv = itemView.findViewById(R.id.item_iv);            item_tv = itemView.findViewById(R.id.item_tv);        }    }}

在主布局中插入RecyclerView

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>    

MainActivity.java

package com.yangmouren.taskcardview;import androidx.appcompat.app.AppCompatActivity;import androidx.recyclerview.widget.LinearLayoutManager;import androidx.recyclerview.widget.RecyclerView;import android.annotation.SuppressLint;import android.os.Bundle;import android.widget.RelativeLayout;import java.util.ArrayList;import java.util.List;/** * @author 杨某人 */public class MainActivity extends AppCompatActivity {    private MyAdapter adapter;    List mList = new ArrayList<>();    @SuppressLint("WrongConstant")    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);//获取RecyclerView并将setHasFixedSize设置为true让RecyclerView避免重新计算大小        RecyclerView mRecyclerView = (RecyclerView) findViewById(R.id.card_list);        mRecyclerView.setHasFixedSize(true);//        创建布局管理器        LinearLayoutManager layoutManager = new LinearLayoutManager(this);        layoutManager.setOrientation(LinearLayoutManager.VERTICAL);//       将RecyclerView对象指定到布局管理器layoutManager        mRecyclerView.setLayoutManager(layoutManager);//      初始化mList        initInfo();//      实例化MyAdapter并传入mList对象        adapter = new MyAdapter(mList);//      为RecyclerView对象mRecyclerView设置adapter        mRecyclerView.setAdapter(adapter);    }//    初始化数据    public void initInfo(){        ContactInfo card1 = new ContactInfo("aaaaaaaaaaaaaaaaaaaa",R.drawable.img_01);        mList.add(card1);        ContactInfo card2 = new ContactInfo("bbbbbbbbbbbbbbbbbbbb",R.drawable.img_02);        mList.add(card2);        ContactInfo card3 = new ContactInfo("cccccccccccccccccccc",R.drawable.img_03);        mList.add(card3);        ContactInfo card4 = new ContactInfo("dddddddddddddddddddd",R.drawable.img_04);        mList.add(card4);        ContactInfo card5 = new ContactInfo("eeeeeeeeeeeeeeeeeeee",R.drawable.img_05);        mList.add(card5);        ContactInfo card6 = new ContactInfo("ffffffffffffffffffff",R.drawable.img_06);        mList.add(card6);        ContactInfo card7 = new ContactInfo("gggggggggggggggggggg",R.drawable.img_07);        mList.add(card7);        ContactInfo card8 = new ContactInfo("gggggggggggggggggggg",R.drawable.img_08);        mList.add(card8);        ContactInfo card9 = new ContactInfo("gggggggggggggggggggg",R.drawable.img_09);        mList.add(card9);    }}

 

更多相关文章

  1. android:文件下载
  2. Android(安卓)pulltorefresh上拉下拉刷新加载
  3. android 简单文件管理器的实现
  4. Android(安卓)中 Bitmap 和 Drawable 相互转换的方法
  5. Android(安卓)布局之GridLayout
  6. android 上面js java数据互传
  7. android之switch控件的用法
  8. Android(安卓)Vibrate
  9. Android(安卓)Binder 机制初步学习 笔记(三)—— Binder 进程通讯

随机推荐

  1. Google Android操作系统内核编译图文教程
  2. Android(安卓)机型适配之本地化
  3. android中的资源访问
  4. android-studio使用cmake编译ffmpeg实践
  5. android 触摸事件、点击事件的区别
  6. SignalR推送消息到android客户端
  7. Android Mms专题之:PDU介绍
  8. 分享两本android电子书
  9. Android 系统framework 概述【转载】
  10. android network,gps定位切换