Android关于RecyclerView设置选中效果和AndroidTV Item选中效果

Android关于RecyclerView设置选中效果

项目里需求2级菜单,要设置recyclerview高亮.

代码块

点击事情里面设置:

nAdapter.refreshItem(position);

adapter里面自定义

private int selectedPos = -1;private int oldPos = -1;getView(ViewHolder helper) {    if(selectedPos == helper.getPosition()) {        //相同设置高亮    } else {        //不同设置    }}public void refreshItem(int position) {    if (selectedPos != -1) {        oldPos  = selectedPos;    }    selectedPos = position;    if (oldPos != -1) {        notifyItemChanged(oldPos);    }    notifyItemChanged(selectedPos);}

AndroidTV Item选中效果

最近看了谷歌TV的adapter,感觉很有意思:

public class CardPresenter extends Presenter {private static final String TAG = "CardPresenter";private static final int CARD_WIDTH = 313;private static final int CARD_HEIGHT = 176;private static int sSelectedBackgroundColor;private static int sDefaultBackgroundColor;private Drawable mDefaultCardImage;private static void updateCardBackgroundColor(ImageCardView view, boolean selected) {    int color = selected ? sSelectedBackgroundColor : sDefaultBackgroundColor;    //这里还可以设置选中放大 失去焦点缩小    view.setBackgroundColor(color);    view.findViewById(R.id.info_field).setBackgroundColor(color);}@Overridepublic ViewHolder onCreateViewHolder(ViewGroup parent) {    Log.d(TAG, "onCreateViewHolder");    sDefaultBackgroundColor = parent.getResources().getColor(R.color.default_background);    sSelectedBackgroundColor = parent.getResources().getColor(R.color.selected_background);    mDefaultCardImage = parent.getResources().getDrawable(R.drawable.movie);    ImageCardView cardView = new ImageCardView(parent.getContext()) {        @Override        public void setSelected(boolean selected) {            updateCardBackgroundColor(this, selected);            super.setSelected(selected);        }    };    cardView.setFocusable(true);    cardView.setFocusableInTouchMode(true);    updateCardBackgroundColor(cardView, false);    return new ViewHolder(cardView);}@Overridepublic void onBindViewHolder(ViewHolder viewHolder, Object item) {    Movie movie = (Movie) item;    ImageCardView cardView = (ImageCardView) viewHolder.view;    if (movie.getImgUrl() != null) {        cardView.setTitleText(movie.getName());        cardView.setContentText(movie.getContent());        cardView.setMainImageDimensions(CARD_WIDTH, CARD_HEIGHT);        Glide.with(viewHolder.view.getContext())                .load(movie.getImgUrl())                .centerCrop()                .error(mDefaultCardImage)                .into(cardView.getMainImageView());    } else {        cardView.setTitleText("woo");        cardView.setContentText("hiiiiii");        cardView.setMainImageDimensions(CARD_WIDTH, CARD_HEIGHT);    }}@Overridepublic void onUnbindViewHolder(ViewHolder viewHolder) {     Log.d(TAG, "onUnbindViewHolder");     ImageCardView cardView = (ImageCardView) viewHolder.view;     // Remove references to images so that the garbage collector can free up memory     cardView.setBadgeImage(null);     cardView.setMainImage(null);     cardView.setBadgeImage(null);     cardView.setMainImage(null);    }}

把present改造成adapter即可。
这个最好配合谷歌的android.support.v17.leanback.widget.HorizontalGridView和VerticalGridView使用。

更多相关文章

  1. 在android中button响应的两种方式
  2. Android动画中Interpolator 加速器的使用
  3. Android(安卓)动画——属性动画Property Animation
  4. 【Android进阶】android:configChanges属性总结
  5. Android实现程序前后台切换效果
  6. Android(安卓)第五天 (下午)
  7. AppBarLayout中android:fitsSystemWindows="true"无效的解决办法
  8. Android(安卓)模仿QQ空间风格的 UI
  9. 在AndroidManifest.xml文件中的android:windowSoftInputMode属性

随机推荐

  1. 最强 Spring Cloud 注册中心 Nacos,和艿艿
  2. 答应我,别再if/else走天下了可以吗
  3. 2021-1-17
  4. 在 Node.js 中转换 SVG 图像格式[每日前
  5. 可能是第二好的 Spring OAuth 2.0 文章,艿
  6. 从TypeScript的类中派生接口[每日前端夜
  7. 写了一个 SSO 单点登录的代码示例给胖友!
  8. 使用 JWT、Redis、MySQL 存储 OAuth2.0
  9. 用 await/async 正确链接 Javascript 中
  10. 浅谈 JavaScript 中的垃圾收集器