转:

http://blog.csdn.net/xyz_lmn/article/details/38735117

《Material Design》提到,Android L版本中新增了RecyclerView、CardView 、Palette。RecyclerView、CardView为用于显示复杂视图的新增Widget。Palette作为调色板类,可以让你从图像中提取突出的颜色。

RecyclerView

RecyclerView作为替代ListView使用,RecyclerView标准化了ViewHolder,ListView中convertView是复用的,在RecyclerView中,是把ViewHolder作为缓存的单位了,然后convertView作为ViewHolder的成员变量保持在ViewHolder中,也就是说,假设没有屏幕显示10个条目,则会创建10个ViewHolder缓存起来,每次复用的是ViewHolder,所以他把getView这个方法变为了onCreateViewHolder。ViewHolder更适合多种子布局的列表,尤其IM的对话列表。RecyclerView不提供setOnItemClickListener方法,你可以在ViewHolder中添加事件。RecyclerView的使用可以参考《Material Design UI Widgets》。


RecyclerView可以实现横向、纵向滑动视图:

Android L 之 RecyclerView 、CardView 、Palette_第1张图片 Android L 之 RecyclerView 、CardView 、Palette_第2张图片

RecyclerView 1 RecyclerView 2

设置横向:

[java] view plain copy print ?
  1. @Override
  2. protectedvoidonCreate(BundlesavedInstanceState){
  3. super.onCreate(savedInstanceState);
  4. setContentView(R.layout.activity_recycler_view_horizontal);
  5. //specifyanadapter(seealsonextexample)
  6. List<MyAdapter.Item>itemList=newArrayList<MyAdapter.Item>();
  7. for(inti=0;i<100;i++)
  8. itemList.add(newMyAdapter.Item("Item"+i,"world"));
  9. mAdapter=newMyAdapter(itemList);
  10. mRecyclerViewHorizontal=(RecyclerView)findViewById(R.id.my_recycler_view_horizontal);
  11. mRecyclerViewHorizontal.setHasFixedSize(true);
  12. //usealinearlayoutmanager
  13. LinearLayoutManagermLayoutManager=newLinearLayoutManager(this);
  14. mLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
  15. mRecyclerViewHorizontal.setLayoutManager(mLayoutManager);
  16. mRecyclerViewHorizontal.setAdapter(mAdapter);
  17. }



CardView

CardView继承自FrameLayout类,可以在一个卡片布局中一致性的显示内容,卡片可以包含圆角和阴影。CardView是一个Layout,可以布局其他View。CardView的使用可以参考《Material Design UI Widgets》。文章最后会给出这篇文章示例代码。

Android L 之 RecyclerView 、CardView 、Palette_第3张图片 Android L 之 RecyclerView 、CardView 、Palette_第4张图片

CardView Palette

Palette

如果你试过android Lollipop的sdk,你可能注意到了Palette。Palette从图像中提取突出的颜色,这样可以把色值赋给ActionBar、或者其他,可以让界面整个色调统一。

Android L 之 RecyclerView 、CardView 、Palette_第5张图片

创建Palette实例

有四种创建实例的方法:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 // Synchronous methods. // -------------------------------- // These should be used when you have access to the underlying image loading thread. // Picasso allows this through a Transformation. For other libraries, YMMV. // Uses the default palette size (16). Palette p = Palette.generate(bitmap); // Allows you to specify the maximum palette size, in this case 24. Palette p = Palette.generate(bitmap, 24); // Asynchronous methods // -------------------------------- // This is the quick and easy integration path. Internally uses an AsyncTask so // this may not be optimal (since you're dipping in and out of threads) // Uses the default palette size (16). Palette.generateAsync(bitmap, new Palette.PaletteAsyncListener() { @Override public void onGenerated(Palette palette) { // Here's your generated palette } }); // Allows you to specify the maximum palette size, in this case 24. Palette.generateAsync(bitmap, 24, new Palette.PaletteAsyncListener() { @Override public void onGenerated(Palette palette) { // Here's your generated palette } });

创建完一个实例之后,我们还需要得到一种采集的样本(swatch),有6中样本(swatch):

1 2 3 4 5 6 Vibrant. Palette.getVibrantSwatch() Vibrant dark. Palette.getDarkVibrantSwatch() Vibrant light. Palette.getLightVibrantSwatch() Muted. Palette.getMutedSwatch() Muted dark. Palette.getDarkMutedSwatch() Muted light. Palette.getLightMutedSwatch()

具体选择哪一种取决于你自己,大多数情况下我们都使用Vibrant and Dark Vibrant。

使用样本(swatch)

swatch有以下方法:

1 2 3 4 5 getPopulation(): the amount of pixels which this swatch represents. getRgb(): the RGB value of this color. getHsl(): the HSL value of this color. getBodyTextColor(): the RGB value of a text color which can be displayed on top of this color. getTitleTextColor(): the RGB value of a text color which can be displayed on top of this color.

比如如果你的TextView 有个背景图片,要想让字体颜色能够和背景图片匹配,则使用getBodyTextColor()比较合适,getTitleTextColor()其实应该和getBodyTextColor()差不多。

下面的代码则是展示了如何从一张图片中提取颜色将textView的背景色设置成图片的主色调,然后再使用getTitleTextColor()来设置一个匹配的文字颜色。

1 2 3 4 5 6 Palette.Swatch swatch = palette.getVibrantSwatch(); TextView titleView = ...; if (swatch != null ) { titleView.setBackgroundColor(swatch.getRgb()); titleView.setTextColor(swatch.getTitleTextColor()); }

需要注意的是getVibrantSwatch()可能会返回一个null值,所以检查一下是必须的。

size的问题

你还可以使用如下方法一次性获得所有的swatch:

1 List<Palette.Swatch> swatches = palette.getSwatches();

在上面的代码中,你可能注意到了可以设置palette的size。size越大,花费的时间越长,而越小,可以选择的色彩也越小。最佳的选择是根据image的用途:

头像之类的,size最好在24-32之间;

风景大图之类的 size差不多在8-16;

默认是16.

===================================================================================================

Palette从图像中提取突出的颜色,这样可以把色值赋给ActionBar、或者其他,可以让界面整个色调统一。

Palette这个类中提取以下突出的颜色:

Vibrant (有活力)

Vibrant dark(有活力 暗色)

Vibrant light(有活力 亮色)

Muted (柔和)

Muted dark(柔和 暗色)

Muted light(柔和 亮色)

提取色值代码如下:

[java] view plain copy print ?
  1. Bitmapbm=BitmapFactory.decodeResource(getResources(),item.image);
  2. Palettepalette=Palette.generate(bm);
  3. if(palette.getLightVibrantColor()!=null){
  4. name.setBackgroundColor(palette.getLightVibrantColor().getRgb());
  5. getSupportActionBar().setBackgroundDrawable(newColorDrawable(palette.getLightVibrantColor().getRgb()));
  6. //getSupportActionBar().
  7. }



更多相关文章

  1. Android中fragment A里面点击button跳转到fragment B实现方法
  2. Android Activity之间传递图片(Bitmap)的方法
  3. 【android】ORMLite框架 的使用方法---给你的数据库操作插上翅膀
  4. Android错误解决方法大集合
  5. Android中WebView获取网页中标题 ,内容, 图片的方法
  6. Android获取IPV4的方法
  7. 【安卓】Android播放器的三种实现方法
  8. Android系统手机端抓包方法
  9. 3.1如何编写程序界面&3.2常见控件使用方法

随机推荐

  1. Android(安卓)Gradle 配置打包输出名称格
  2. Android音频捕获(录音)(转)
  3. Android中数据解析的实现
  4. android surfaceflinger研究----Surface
  5. 关于解决Andorid的RecyclerView在V7包下
  6. Android强制为自身应用设置实现多语言
  7. android 中的二维码生成与去除白边
  8. android的核心竞争力
  9. 解决Android(安卓)9 无法连接网络问题
  10. Android(安卓)Studio精彩案例(七)《ToolB