关闭

Android: Material Design 简单介绍(3)

标签: android设计listviewMaterial
217人阅读 评论(0) 收藏 举报
分类:

处理点击事件

不像ListVIew,RecyclerVIew没有onItemClick 接口,所以你需要在你的adapter里自己实现。在TravelListAdapter,创建一个局部变量来存放OnItemClickListener的实例

OnItemClickListener mItemClickListener;
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

你需要加上下面的方法在viewHolder的内部类

@Override
public void onClick(View v) {

}

最终,把这两个结合想起来

placeHolder.setOnClickListener(this);

在上面的代码里,你给placeHolder 初始化了setOnClickListener 然后重写了onClick 方法,你需要给RecyclerView实现onClick 借口。首先,在ViewHolder 类里定义如下的接口

public interface OnItemClickListener {
  void onItemClick(View view, int position);
}

然后创建它的setter方法

public void setOnItemClickListener(final OnItemClickListener mItemClickListener) {
  this.mItemClickListener = mItemClickListener;
}

在onclick里处理逻辑

if (mItemClickListener != null) {
  mItemClickListener.onItemClick(itemView, getPosition());
}

现在你点击屏幕就会看到如下的效果

这里写图片描述

在MainActivity创建OnItemClickListener 的实例

TravelListAdapter.OnItemClickListener onItemClickListener = new TravelListAdapter.OnItemClickListener() {
  @Override
  public void onItemClick(View v, int position) {
    Toast.makeText(MainActivity.this, "Clicked " + position, Toast.LENGTH_SHORT).show();
  }
};

最终,给adapter加上listener

mAdapter.setOnItemClickListener(onItemClickListener);

现在再运行,就能看到土司了

这里写图片描述

从List到Grid的转换

StaggeredLayoutManager 可以让你的布局随意变动。如果说你想让它每行显示两列,只需要spanCount 就可以了。

在toggle()方法里,加上if

mStaggeredLayoutManager.setSpanCount(2);

else

mStaggeredLayoutManager.setSpanCount(1);

现在的效果是这样的

这里写图片描述

使用Palette API

现在你可以加入一些有趣的Material Design特性。首先回到TravelListAdapter,在这里你讲会给placeNameHolder 增加一些动态的北京颜色。

在onBindViewHolder(…):里加上下面的代码

Bitmap photo = BitmapFactory.decodeResource(mContext.getResources(), place.getImageResourceId(mContext));

Palette.generateAsync(photo, new Palette.PaletteAsyncListener() {
  public void onGenerated(Palette palette) {
    int bgColor = palette.getMutedColor(mContext.getResources().getColor(android.R.color.black));
    holder.placeNameHolder.setBackgroundColor(bgColor);
  }
});

通过使用 generateAsync(…)给北京生成一个颜色调色板,你将会在调色板创建好了之后出发回调函数,在这里你可以设置背景,如果颜色不存在会使用android.R.color.black.

这里写图片描述

1
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:210256次
    • 积分:2505
    • 等级:
    • 排名:第14736名
    • 原创:78篇
    • 转载:60篇
    • 译文:21篇
    • 评论:13条
    博客专栏
    最新评论