gpt4 book ai didi

android - 具有重叠元素的 RecyclerView

转载 作者:行者123 更新时间:2023-11-29 02:34:45 24 4
gpt4 key购买 nike

我正在尝试创建一个类似于此的布局,将 RecyclerView 用于类似电视的应用程序。

enter image description here

第一个元素表示焦点项目应该是什么样子。我尝试过的解决方案是:

  • 使用 cardView 作为元素的父布局。问题:当我通过修改布局参数使聚焦元素变大时,整行变大,其余行被下推
  • 使用 leanback 库中的 VerticalGridView - 将焦点元素所在的列向下推
  • 尝试使用海拔高度和Z 平移,但行仍然被向下推
  • 固定RecyclerView 高度,仍然是相同的行为
  • 使用 clipChildren 属性,行仍然被下推

唯一有效的方法是缩放聚焦元素,但这不是解决方案,因为所有子元素都在缩放,如 TextViews 等,并且文本看起来不正确。有没有人对此有任何解决方案,一种方法的看法?谢谢!

最佳答案

API 21+只需在您的 View 中使用

 @Override
public void onFocusChange(View v, boolean hasFocus) {
ViewCompat.setElevation(this, hasFocus?1:0);
}

API 16+这是我扩展的 TvRecyclerView:

public class TvRecyclerView extends android.support.v7.widget.RecyclerView {

public TvRecyclerView(Context context) {
super(context);
setChildrenDrawingOrderEnabled(true);
}

public TvRecyclerView(Context context, AttributeSet attrs) {
super(context, attrs);
setChildrenDrawingOrderEnabled(true);
}

public TvRecyclerView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
setChildrenDrawingOrderEnabled(true);
setClipToPadding(false);
}

@Override
protected int getChildDrawingOrder(int childCount, int i) {
View view = getLayoutManager().getFocusedChild();
if (null == view) {
return super.getChildDrawingOrder(childCount, i);
}
int position = indexOfChild(view);

if (position < 0) {
return super.getChildDrawingOrder(childCount, i);
}
if (i == childCount - 1) {
return position;
}
if (i == position) {
return childCount - 1;
}
return super.getChildDrawingOrder(childCount, i);
}
}

基本上它只是重新排序项目,所以重点项目总是在最前面。

同样在你的观点中你需要使用

@Override
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus) {
v.setScaleX(1.5f);
v.setScaleY(1.5f);
mRecyclerView.invalidate();
} else {
v.setScaleX(1.0f);
v.setScaleY(1.0f);
}
}

关于android - 具有重叠元素的 RecyclerView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47690297/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com