【问题标题】:Add View overlay on top of ImageCardView在 ImageCardView 之上添加视图覆盖
【发布时间】:2016-05-24 13:06:38
【问题描述】:

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

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

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

普通卡示例:

我想要完成的工作:

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

【问题讨论】:

  • 您是否尝试将LayoutLeanback Library 本身修改?
  • @jaydroider,你的意思是创建我自己的并替换 leanback 一个?
  • 修改 Lean Back Library 中的 LayoutSDK 中的 Image Card View Layout 它自己。它会为你解决问题。
  • 你明白我的意思吗?如果没有,那么我会建议你如何做到这一点。我已根据要求修改了Layout。所以让我知道。
  • @jaydroider,最后并没有真正朝那个方向发展。我从卡中删除了该功能。如果您有一个可行的解决方案,您可以将其作为答案发布,我可以将其标记为已接受:) 可能会有其他人希望以这种方式实现它。

标签: android android-cardview android-tv leanback


【解决方案1】:

我认为这行得通。

onBindViewHolder(){

.

..

...

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

((ViewGroup)((ImageCardView) 
viewHolder.view).getMainImageView().getParent().getParent()).addView(xxx, count);
}

【讨论】:

  • 请在您的代码中解释为什么您认为它有效。这将有助于 OP 和未来的访问者理解。
【解决方案2】:

从 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
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多