2

我正在开发电视应用程序并尝试leanback support library尽可能多地使用。我遇到的问题是我试图在ImageViewin顶部添加一个 View ImageCardView。我想让我的自定义视图以该图像为中心。

我尝试简单地在 0 索引上添加视图,但它只是将图像向下推并位于其顶部。我看到的ImageCardView是 FrameLayout,但它似乎FrameLayout已更改,因此所有子项都垂直对齐。

我还尝试获取 的父级ImageCardView,即ShadowOverlayContainer,并在那里添加视图,但它仍然没有显示。

普通卡示例:

在此处输入图像描述

我要完成的工作: 在此处输入图像描述

任何建议如何添加该视图?谢谢你。

4

2 回答 2

0

我认为这行得通。

onBindViewHolder(){

.

..

...

int count = ((ViewGroup)((ImageCardView) viewHolder.view).getMainImageView().getParent().getParent()).getChildCount();

((ViewGroup)((ImageCardView) 
viewHolder.view).getMainImageView().getParent().getParent()).addView(xxx, count);
}
于 2017-05-26T08:56:11.230 回答
0

由于 API 级别 18 (JELLY_BEAN_MR2),您可以使用 ViewOverlay

https://developer.android.com/reference/android/view/ViewOverlay

https://developer.android.com/reference/android/view/View#getOverlay()

  • 得到一个可绘制的drawable = context.getDrawable(R.drawable.sample)
  • 设置它的界限drawable.setBounds(0, 0, 50, 50)
  • 添加叠加层view.getOverlay().add(drawable)
public class ImageCardViewPresenter extends Presenter {
    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent) {
        ImageCardView imageCardView = new ImageCardView(parent.getContext());
        imageCardView.setMainImageDimensions(100, 100);
        return new ImageCardViewHolder(imageCardView);
    }

    @Override
    public void onBindViewHolder(ViewHolder viewHolder, Object item) {
        Model model = (Model) item;
        ImageCardView imageCardView = (ImageCardView) viewHolder.view;
        Context context = imageCardView.getContext();

        imageCardView.setTitleText(model.getTitle());
        imageCardView.setMainImage(context.getDrawable(model.getImageId());

        Drawable badge = context.getDrawable(model.getBadgeId());
        badge.setBounds(0, 0, 20, 20);
        imageCardView.getOverlay().clear();
        imageCardView.getOverlay().add(badge);
    }

    @Override
    public void onUnbindViewHolder(ViewHolder viewHolder) {
        ImageCardView imageCardView = (ImageCardView) viewHolder.view;
        imageCardView.setMainImage(null);
        imageCardView.getOverlay().clear();
    }

    public static class ImageCardViewHolder extends ViewHolder {
        public ImageCardViewHolder(View view) {
            super(view);
        }
    }
}
public class Model {
    private String title;

    @DrawableRes
    private int imageId;

    @DrawableRes
    private int badgeId;

    // getters and setters
}
于 2022-01-07T17:17:16.770 回答