最终效果

表格布局

垂直布局

横向布局

添加引用

build.gradle

    implementation 'com.android.support:recyclerview-v7:28.0.0'
implementation 'com.android.support:cardview-v7:28.0.0'
implementation 'com.android.support:palette-v7:28.0.0'

主布局,添加一个RecyclerView

layout/activity_recyclerview.xml

  <android.support.v7.widget.RecyclerView
android:id="@+id/demo_recyclerview"
android:layout_width="match_parent"
android:layout_height="match_parent">
</android.support.v7.widget.RecyclerView>

item子布局,使用CardView卡片式布局

layout/item_recyclerview.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="160dp"
android:layout_height="200dp"
android:layout_gravity="center"
app:cardBackgroundColor="@android:color/white"
app:cardCornerRadius="5dp"
app:cardElevation="2dp"
app:cardMaxElevation="@dimen/cardview_default_elevation"> <!--cardBackgroundColor:卡片的背景颜色-->
<!--cardCornerRadius:卡片的圆角半径-->
<!--cardElevation:卡片阴影的宽度-->
<!--cardMaxElevation:最大卡片阴影的宽度--> <LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"> <ImageView
android:id="@+id/item_image"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="3"
android:scaleType="fitXY"/> <TextView
android:id="@+id/item_title"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:clickable="true"
android:gravity="center"
android:padding="5dp"
android:textColor="@android:color/black"
android:textSize="16dp"/>
</LinearLayout> </android.support.v7.widget.CardView>

为每一个卡片定义一个类

Item.java

public class Item {
private String title;//图片的名字
private int resId;//图片的资源Id
public Item(String title, int resId) {
this.title = title;
this.resId = resId;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public int getResId() {
return resId;
}
public void setResId(int resId) {
this.resId = resId;
}
}

RecyclerView的适配器,使用Palette调色板提取颜色

RecyclerAdapter.java

imimport android.content.Context;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v7.graphics.Palette;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import java.util.List; public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.MyViewHolder> { private Context context;
private List<Item> itemList;
private Resources resources;
private LayoutInflater inflater; public RecyclerAdapter(Context context, List<Item> itemList) {
this.context = context;
this.itemList = itemList;
this.resources = context.getResources();
//加载布局管理器,从一个Context中获得一个布局填充器
inflater = LayoutInflater.from(context);
} @NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent,int v) {
//将xml布局转换为View对象
View view = inflater.inflate(R.layout.item_recyclerview, parent, false);
//RecycleView的点击事件
final MyViewHolder holder=new MyViewHolder(view);
holder.image.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
int pos=holder.getAdapterPosition();
Item item=itemList.get(pos);
Toast.makeText(view.getContext(),"you clicked image "+item.getTitle(),Toast.LENGTH_SHORT).show();
}
});
return holder;
} @Override
public void onBindViewHolder(@NonNull final MyViewHolder holder, final int position) {
final Item item = itemList.get(position);
holder.title.setText(item.getTitle());
holder.image.setImageResource(item.getResId());
Bitmap bitmap = BitmapFactory.decodeResource(resources, item.getResId());
//异步获得bitmap图片颜色值
Palette.from(bitmap).generate(new Palette.PaletteAsyncListener() {
@Override
public void onGenerated(@Nullable Palette palette) {
//Palette提取颜色
Palette.Swatch vibrant=palette.getVibrantSwatch();//有活力
Palette.Swatch c=palette.getDarkVibrantSwatch();//有活力、暗色
Palette.Swatch d=palette.getLightVibrantSwatch();//有活力、亮色
Palette.Swatch f=palette.getMutedSwatch();//柔和
Palette.Swatch a=palette.getDarkMutedSwatch();//柔和、暗色
Palette.Swatch b=palette.getLightMutedSwatch();//柔和、亮色
if(vibrant!=null )
{
int color1=vibrant.getBodyTextColor();//内容颜色
int color2=vibrant.getTitleTextColor();//标题颜色
int color3=vibrant.getRgb();//RGB颜色
if(position<4)
{
holder.title.setBackgroundColor(f.getRgb());
holder.title.setTextColor(f.getTitleTextColor());
}
else
{
holder.title.setBackgroundColor(vibrant.getRgb());
holder.title.setTextColor(vibrant.getTitleTextColor());
}
}
}
});
} @Override
public int getItemCount() {
return null==itemList?0:itemList.size();
} public class MyViewHolder extends RecyclerView.ViewHolder {
public TextView title;
public ImageView image; public MyViewHolder(@NonNull View itemView) {
super(itemView);
title = itemView.findViewById(R.id.item_title);
image = itemView.findViewById(R.id.item_image);
}
}
}

实际应用

RecyclerViewActivity.java

import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.widget.LinearLayout; import java.util.ArrayList;
import java.util.List; /**
* RecycleView、CardView、Palette控件应用
*/
public class RecyclerViewActivity extends AppCompatActivity { private RecyclerView mRecyclerView;
private RecyclerAdapter mRecyclerAdapter;
private List<Item> viewData = new ArrayList<>();//图片列表 @Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_recyclerview);
loadDatas();
initViews();
} private void loadDatas() {
viewData.add(new Item("第1张图", R.mipmap.item1));
viewData.add(new Item("第2张图", R.mipmap.item2));
viewData.add(new Item("第3张图", R.mipmap.item3));
viewData.add(new Item("第4张图", R.mipmap.item4));
viewData.add(new Item("第5张图", R.mipmap.item5));
viewData.add(new Item("第6张图", R.mipmap.item6));
viewData.add(new Item("第7张图", R.mipmap.item7));
} private void initViews() {
mRecyclerView = findViewById(R.id.demo_recyclerview); //第一种设置布局方式:使用表格,显示3列
mRecyclerView.setLayoutManager(new GridLayoutManager(this, 3)); //第二种设置布局方式:默认使用垂直方式(纵向滚动)
//mRecyclerView.setLayoutManager(new LinearLayoutManager(this)); //第三种设置布局方式:横向滚动
//LinearLayoutManager linearLayoutManager=new LinearLayoutManager(this);
//linearLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
//mRecyclerView.setLayoutManager(linearLayoutManager); //设置添加删除Item时的动画
mRecyclerView.setItemAnimator(new DefaultItemAnimator());
//初始化设置配
mRecyclerAdapter = new RecyclerAdapter(this, viewData);
//设置适配器
mRecyclerView.setAdapter(mRecyclerAdapter);
}
}

Android控件_RecycleView+CarView+Palette联合应用的更多相关文章

  1. [Android Pro] android控件ListView顶部或者底部也显示分割线

    reference to  :  http://blog.csdn.net/lovexieyuan520/article/details/50846569 在默认的Android控件ListView在 ...

  2. Android控件Gridview实现仿支付宝首页,Fragment底部按钮切换和登录圆形头像

    此案例主要讲的是Android控件Gridview(九宫格)完美实现仿支付宝首页,包含添加和删除功能:Fragment底部按钮切换的效果,包含四个模块,登录页面圆形头像等,一个小项目的初始布局. 效果 ...

  3. Android 控件架构及View、ViewGroup的测量

    附录:示例代码地址 控件在Android开发的过程中是必不可少的,无论是我们在使用系统控件还是自定义的控件.下面我们将讲解一下Android的控件架构,以及如何实现自定义控件. 1.Android控件 ...

  4. Android - 控件android:ems属性

    Android - 控件android:ems属性http://blog.csdn.net/caroline_wendy/article/details/41684255?utm_source=tui ...

  5. Android 控件知识点,

    一.Android控件具有visibility属性,可以取三个值:visible(默认值)可见,invisible(不可见,但仍然占据原有的位置和大小,可以看做是变得透明了),gone(空间不仅不可见 ...

  6. UIAutomator定位Android控件的方法

    UIAutomator各种控件定位的方法. 1. 背景 使用SDK自带的NotePad应用,尝试去获得在NotesList那个Activity里的Menu Options上面的那个Add note菜单 ...

  7. 从Android系统出发,分析Android控件构架

    从Android系统出发,分析Android控件构架 Android中所有的控件追溯到根源,就是View 和ViewGroup,相信这个大家都知道,但是大家也许会不太清楚它们之间的具体关系是什么,在A ...

  8. Android控件系列之RadioButton&RadioGroup(转)

    学习目的: 1.掌握在Android中如何建立RadioGroup和RadioButton 2.掌握RadioGroup的常用属性 3.理解RadioButton和CheckBox的区别 4.掌握Ra ...

  9. 第三个 android控件

    android控件以及控件对应的属性:

随机推荐

  1. java网络编程-面试题

    1.网络编程时的同步.异步.阻塞.非阻塞? 同步:函数调用在没得到结果之前,没有调用结果,不返回任何结果.异步:函数调用在没得到结果之前,没有调用结果,返回状态信息.阻塞:函数调用在没得到结果之前,当 ...

  2. Mybatis Plus带多条件的多表联合、分页、排序查询

    目录 一.现有表 student学生表: facultylist学院表: 二.同时满足以下需求: 1.多表联合查询出学院名字 2.可以带多条件查询 3.指定页码,页数据大小进行物理分页查询 三.解决步 ...

  3. (六)mybatis 全局配置文件讲解

    目录 properties (属性) settings 全局参数配置 typeAliases 别名设置 typeHandlers 类型处理器 mapper (映射器) 细节 properties (属 ...

  4. Technocup 2020 - Elimination Round 1补题

    慢慢来. 题目册 题目 A B C D tag math strings greedy dp 状态 √ √ √ √ //∅,√,× 想法 A. CME res tp A 题意:有\(n\)根火柴,额外 ...

  5. 星舟平台的使用(GIT、spring Boot 的使用以及swagger组件的使用)

    一.介绍星舟平台     1.星舟简介     2.网关kong的介绍     3.客户端         1).服务注册:Eureka         2).客户端负载均衡:Ribbon     4 ...

  6. 2.安装阿里yum源

    1.删除自带的yum源:#cd /etc/yum.repos.d/#rm -rf *   2.配置远程yum源:wget -O /etc/yum.repos.d/CentOS-Base.repo ht ...

  7. 【01字典树】hdu-5536 Chip Factory

    [题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=5536 [题意] 求一个式子,给出一组数,其中拿出ai,aj,ak三个数,使得Max{ (ai+aj ...

  8. 【广搜】Knight Moves

    题目描述 Mr Somurolov, fabulous chess-gamer indeed, asserts that no one else but him can move knights fr ...

  9. linux安装字体库(simSun为例)

    在开发过程中,发现报表打印,字体和默认字体不一样.本地开发环境(windows)没问题,但是远程linux一直出现这样的问题.经过排查发现linux没有安装中文字体库宋体. linux查看当前的字体库 ...

  10. POJ 1860 汇率 SPFA

    题意 有多种汇币,汇币之间可以交换,这需要手续费,当你用100A币交换B币时,A到B的汇率是29.75,手续费是0.39,那么你可以得到(100 - 0.39) * 29.75 = 2963.3975 ...