AndroidRecyclerViewitem选中放大被遮挡问题详解-创新互联

在Android TV上一般选中某个View, 都会有焦点突出放大的效果, 但是当在RecyclerView中(ListView或GridView)实现当item View执行放大动画后会被其他的item View遮挡.

创新互联建站是一家专注于网站设计制作、网站设计与策划设计,若羌网站建设哪家好?创新互联建站做网站,专注于网站建设十载,网设计领域的专业建站公司;建站业务涵盖:若羌等地区。若羌做网站价格咨询:18980820575

原因是: RecyclerView的机制是越靠后的View z-order越高, 所以bringToFront方法是不管用的.

在实现针对TV端的自定义控件 TvRecyclerView 时遇到此问题, 最后的解决方案是:


自定义RecyclerView, 重写getChildDrawingOrder方法, 让选中的item最后绘制, 这样就不会让其他view遮挡.

public class ScaleRecyclerView extends RecyclerView {

  private int mSelectedPosition = 0;

  public ScaleRecyclerView(Context context) {
    super(context);
    init();
  }

  public ScaleRecyclerView(Context context, @Nullable AttributeSet attrs) {
    super(context, attrs);
    init();
  }

  public ScaleRecyclerView(Context context, @Nullable AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
    init();
  }

  private void init() {
    //启用子视图排序功能
    setChildrenDrawingOrderEnabled(true);
  }

  @Override
  public void onDraw(Canvas c) {
    mSelectedPosition = getChildAdapterPosition(getFocusedChild());
    super.onDraw(c);
  }

  @Override
  protected int getChildDrawingOrder(int childCount, int i) {
    int position = mSelectedPosition;
    if (position < 0) {
      return i;
    } else {
      if (i == childCount - 1) {
        if (position > i) {
          position = i;
        }
        return position;
      }
      if (i == position) {
        return childCount - 1;
      }
    }
    return i;
  }
}


当前名称:AndroidRecyclerViewitem选中放大被遮挡问题详解-创新互联
文章路径:http://hxwzsj.com/article/jgdid.html

其他资讯

Copyright © 2025 青羊区翔捷宏鑫字牌设计制作工作室(个体工商户) All Rights Reserved 蜀ICP备2025123194号-14
友情链接: 成都网站制作 盐亭网站设计 达州网站设计 成都响应式网站建设公司 成都企业网站制作 成都网站建设公司 成都网站设计 外贸营销网站建设 企业网站设计 网站设计制作报价 重庆网站建设 网站建设 响应式网站设计 手机网站建设套餐 网站建设公司 成都网站建设流程 高端网站设计 H5网站制作 成都响应式网站建设 重庆企业网站建设 重庆电商网站建设 手机网站建设