Добавить рамку на выбранную карту в Android TV - PullRequest
0 голосов
/ 24 сентября 2019

Я разработал телевизионное приложение, использующее библиотеку с откидыванием, и я хочу добавить белую рамку к выбранному элементу вместе с эффектом уменьшения масштаба, происходит масштабирование, но нет способа добавить рамку.Я много искал, но не смог найти никакой возможной работы вокруг.

public class CardPresenter extends Presenter {

private int mSelectedBackgroundColor = -1;
private int mDefaultBackgroundColor = -1;
private Drawable mDefaultCardImage;

@Override
public ViewHolder onCreateViewHolder(ViewGroup parent) {
   mDefaultBackgroundColor =
        ContextCompat.getColor(parent.getContext(), R.color.default_background);
    mSelectedBackgroundColor =
            ContextCompat.getColor(parent.getContext(), R.color.selected_background);

    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;

    view.setBackgroundColor(color);
    view.findViewById(R.id.info_field).setBackgroundColor(color);
}

@Override
public void onBindViewHolder(Presenter.ViewHolder viewHolder, Object item) {
    VideoItem video = (VideoItem) item;

    ImageCardView cardView = (ImageCardView) viewHolder.view;
    cardView.setTitleText(video.getVideoName());

    if (video.getVideoImageThumbnail() != null) {
        // 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(width, height);

        Glide.with(cardView.getContext())
                .load(video.getVideoImageThumbnail())
                .diskCacheStrategy(DiskCacheStrategy.ALL)
                .into(cardView.getMainImageView());
    }
}

}

//Load rows method
private void loadRows() {

    // to make item look large
    ListRowPresenter presenter= new 
    ListRowPresenter(FocusHighlight.ZOOM_FACTOR_LARGE,true); 
    presenter.setShadowEnabled(false);
    mRowsAdapter = new ArrayObjectAdapter(presenter);
}

1 Ответ

0 голосов
/ 28 сентября 2019

Leanback's CardView не поддерживает добавление границы.Для этого вам нужно будет использовать MaterialCardView Компонентов материала.

Сначала добавьте библиотеку компонентов материала в свой проект:

implementation "com.google.android.material:material:1.1.0-alpha10"

Затем сделайте расширение ImageCardView MaterialCardView вместо BaseCardView и добавьте в него следующий код:

init {
    borderWidth = 0f
    setBorderColor(Color.WHITE)
}

override fun setSelected(selected: Boolean) {
    super.setSelected(selected)
    borderWidth = if (selected) 4f else 0f
}
...