2016-03-10 4 views
1

Я работаю над Android-телефоном. У меня есть список фильмов, которые я заполнял внутри класса BrowserFragment. У меня есть класс презентатора, который использует ImageCardView, чтобы показать миниатюру фильма. Я пытаясь настроить imagecardview на Selected.I хотел, чтобы это выглядело как рис. На выбор конкретного ImageCardView миниатюра будет увеличиваться в размере, но выравнивание базы должно быть таким же, как и другие невыбранные, как показано на рисунке pic.Изменение размера макета Android TV ImageViewCard

EDIT Pic Ссылка https://www.dropbox.com/s/habpjnrlwh1se8v/sample.png?dl=0

EDIT Presenter класс

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); 
} 
} 

Любая помощь будет в значительной степени было оценено

+0

Пожалуйста, добавьте ссылочное изображение или Добавьте код класса презентатора, который имеет вид карты изображения. –

+0

@jaydroider У меня нет достаточной репутации для отправки изображения, поэтому я добавил ссылку на образец изображения – Infimate

+0

Пожалуйста, разместите свой код класса презентатора. –

ответ

1

Попробуйте с помощью этого метода.

В вашем классе Вид владельца. Измените это.

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); 
    } 
} 

Где ширина карты и высота карты должна быть определить Глобально в классе ведущий.

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' 

Надеюсь, это вам поможет.

+1

@Infimate У вас есть рабочий брат? –

+0

Нет, я еще не пробовал. Я переключил свое внимание на выборку и потребление веб-сервиса. Когда я закончил, я попробую вашу идею, а затем дам вам знать – Infimate