Android TV ImageViewCard 布局边距变化
Posted
技术标签:
【中文标题】Android TV ImageViewCard 布局边距变化【英文标题】:Android TV ImageViewCard Layout margin change 【发布时间】:2016-06-24 23:51:07 【问题描述】:我一直在开发一个 android 电视应用程序。我在 BrowserFragment
类中填充了电影列表。我有一个使用 ImageCardView
显示电影缩略图的演示者类。我正在尝试在 Selected 上自定义 imagecardview。我希望它看起来像这里的图片。在选择特定的 ImageCardView
时,缩略图的大小会增加,但基本对齐方式应该与 pic 中所示的其他未选中的相同。
编辑图片链接https://www.dropbox.com/s/habpjnrlwh1se8v/sample.png?dl=0
编辑演示者类
public class CardPresenter extends Presenter
private int mSelectedBackgroundColor = -1;
private int mDefaultBackgroundColor = -1;
private Drawable mDefaultCardImage;
class ViewHolder extends Presenter.ViewHolder
HashMap<Integer,Object> ObjectsList=new HashMap<>();
public ViewHolder(View view)
super(view);
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent)
mDefaultBackgroundColor = R.color.default_background;
mSelectedBackgroundColor = R.color.selected_background;
mDefaultCardImage = parent.getResources().getDrawable(R.drawable.lb_card_shadow_focused, null);
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);
private void updateCardBackgroundColor(ImageCardView view, boolean selected)
int color = selected ? mSelectedBackgroundColor : mDefaultBackgroundColor;
// Both background colors should be set because the view's
// background is temporarily visible during animations.
view.setBackgroundColor(color);
view.findViewById(R.id.info_field).setBackgroundColor(color);
@Override
public void onBindViewHolder(Presenter.ViewHolder viewHolder, Object item)
Movie movie = (Movie) item;
ImageCardView cardView = (ImageCardView) viewHolder.view;
cardView.setTitleText(movie.getName());
cardView.setContentText(movie.getCategory());
if (movie.getImgResUrl() != 0)
// Set card size from dimension resources.
Resources res = cardView.getResources();
// int width = res.getDimensionPixelSize(R.dimen.card_width);
// int height = res.getDimensionPixelSize(R.dimen.card_height);
cardView.setMainImageDimensions(300, 300);
Glide.with(cardView.getContext())
.load(movie.getImgResUrl())
.error(mDefaultCardImage)
.into(cardView.getMainImageView());
@Override
public void onUnbindViewHolder(Presenter.ViewHolder viewHolder)
ImageCardView cardView = (ImageCardView) viewHolder.view;
// Remove references to images so that the garbage collector can free up memory.
cardView.setBadgeImage(null);
cardView.setMainImage(null);
任何帮助将不胜感激。谢谢
【问题讨论】:
请添加参考图像或添加具有图像卡视图的演示者类代码。 @jaydroider 我没有足够的声誉来发布图片,所以我添加了指向示例图片的链接 请发布您的演示者课程代码。 目前使用此代码,您的列表行布局看起来如何。你能解释一下吗? 是的,我有一排电影缩略图,我可以垂直向下滚动。每一行都有不同的类别,如喜剧、动作冒险。添加这些类别只是为了名字。 【参考方案1】:试试这个方法。
在你的 View Holder 类中修改这个。
class ViewHolder extends Presenter.ViewHolder
private ImageCardView mCardView;
private Drawable mDefaultCardImage;
private PicassoImageCardViewTarget mImageCardViewTarget;
HashMap<Integer,Object> ObjectsList=new HashMap<>();
public ViewHolder(View view)
super(view);
mCardView = (ImageCardView) view;
mImageCardViewTarget = new PicassoImageCardViewTarget(mCardView);
protected void updateCardViewImage(URI uri)
Picasso.with(mContext)
.load(uri.toString())
.resize(Utils.convertDpToPixel(mContext, CARD_WIDTH),
Utils.convertDpToPixel(mContext, CARD_HEIGHT))
.error(mDefaultCardImage)
.into(mImageCardViewTarget);
应该在 Presenter 类中全局定义卡片宽度和卡片高度。
private static int CARD_WIDTH = 323;
private static int CARD_HEIGHT = 146;
然后像这样在 onBindViewHolder 中调用它。
if (movie.getImgResUrl() != 0)
Resources res = cardView.getResources();
((ViewHolder) viewHolder).mCardView.setMainImageDimensions(CARD_WIDTH, CARD_HEIGHT);
((ViewHolder) viewHolder).updateCardViewImage(movie.getCardImageURI());
不要忘记在 Build.Gradle 文件中添加它。
compile 'com.squareup.picasso:picasso:2.3.2'
希望这会对你有所帮助。
【讨论】:
不,我还没有尝试过。我将注意力转移到获取和使用网络服务上。完成后,我会尝试你的想法,然后告诉你以上是关于Android TV ImageViewCard 布局边距变化的主要内容,如果未能解决你的问题,请参考以下文章
Android TV 应用无法安装在 Android TV 设备上
Smart TV、Android TV 和 Fire TV 的一种语言