Android: Material Design 简单介绍(3)

处理点击事件

不像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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值