Amitai Rosenberg
- Forum posts: 27
Jun 14, 2016, 3:07:29 PM via Website
Jun 14, 2016 3:07:29 PM via Website
I'm trying to generate a Palette for each CardView I have inside a RecyclerView, and to color the card based on the Palette generated.
However, for some weird reason, only the last two CardViews of the RecyclerView get colored.
This is my code:
RecyclerAdapter:
public class RecyclerAdapter : RecyclerView.Adapter, Palette.IPaletteAsyncListener
{
private List<Book> mBooks;
private RecyclerView mRecyclerView;
private Context mContext;
private int mCurrentPosition = -1;
private bool isPaletteGenerated = false;
MyView myHolder;
public RecyclerAdapter(List<Book> books, RecyclerView recyclerView, Context context)
{
mBooks = books;
mRecyclerView = recyclerView;
mContext = context;
}
public class MyView : RecyclerView.ViewHolder
{
public View mMainView { get; set; }
public TextView mTitle { get; set; }
public ImageView mCoverImage { get; set; }
public int mCoverImageResourceID { get; set; }
public CardView mCard { get; set; }
public MyView(View view) : base(view)
{
mMainView = view;
}
}
public override RecyclerView.ViewHolder OnCreateViewHolder(ViewGroup parent, int viewType)
{
View bookItem = LayoutInflater.From(parent.Context).Inflate(Resource.Layout.item_book, parent, false);
TextView bookTitle = bookItem.FindViewById<TextView>(Resource.Id.bookTitle);
ImageView coverImage = bookItem.FindViewById<ImageView>(Resource.Id.coverImage);
CardView card = bookItem.FindViewById<CardView>(Resource.Id.card);
MyView view = new MyView(bookItem) { mTitle = bookTitle, mCoverImage = coverImage, mCard = card};
return view;
}
public override async void OnBindViewHolder(RecyclerView.ViewHolder holder, int position)
{
myHolder = holder as MyView;
myHolder.mMainView.Click += mMainView_Click;
myHolder.mTitle.Text = mBooks[position].Title;
myHolder.mCoverImage.SetImageDrawable(mBooks[position].Cover.Drawable);
myHolder.mCoverImageResourceID = mBooks[position].imageResourceId;
if (position > mCurrentPosition)
{
int currentAnim = Resource.Animation.slide_left_to_right;
//SetAnimation(myHolder.mMainView, currentAnim);
mCurrentPosition = position;
}
Bitmap photo = await BitmapFactory.DecodeResourceAsync(mContext.Resources, myHolder.mCoverImageResourceID);
BitmapDrawable bitmapDrawable = ((BitmapDrawable)mBooks[position].Cover.Drawable);
Bitmap image = bitmapDrawable.Bitmap;
var palette = Palette.From(photo).MaximumColorCount(16).Generate(this);
}
public void OnGenerated(Palette palette)
{
if (palette == null)
return;
try
{
if (palette.LightVibrantSwatch != null)
{
var lightVibrant = new Color(palette.LightVibrantSwatch.Rgb);
myHolder.mCard.SetCardBackgroundColor(lightVibrant);
}
if (palette.DarkVibrantSwatch != null)
{
var darkVibrant = new Color(palette.DarkVibrantSwatch.Rgb);
myHolder.mCard.SetCardBackgroundColor(darkVibrant);
}
}
catch (Exception ex)
{
}
}
public override int ItemCount
{
get { return mBooks.Count; }
}
}
Fragment in which the RecyclerView is inside:
public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
mRecyclerView = view.FindViewById<RecyclerView>(Resource.Id.booksRecyclerView);
mBooks = new List<Book>();
ImageView cover = new ImageView(Activity);
cover.SetImageResource(Resource.Drawable.Torat_Hamachane1);
mBooks.Add(new Book() { Title = "תורת המחנה א' - הלכות יום ויום", Cover = cover, imageResourceId = Resource.Drawable.Torat_Hamachane1});
mLayoutManager = new GridLayoutManager(Activity, 2);
mRecyclerView.SetForegroundGravity(GravityFlags.CenterHorizontal);
mRecyclerView.SetLayoutManager(mLayoutManager);
SimpleItemAnimator x = null;
mRecyclerView.SetItemAnimator(x);
mAdapter = new RecyclerAdapter(mBooks, mRecyclerView, Activity);
mRecyclerView.SetAdapter(mAdapter);
cover = new ImageView(Activity);
cover.SetImageResource(Resource.Drawable.kitzurTHM);
mBooks.Add(new Book() { Title = "קיצור תורת המחנה - הלכות יום ויום ושבת", Cover = cover, imageResourceId = Resource.Drawable.kitzurTHM });
cover = new ImageView(Activity);
cover.SetImageResource(Resource.Drawable.halkasPurim);
mBooks.Add(new Book() { Title = "הלכה כסדרה - הלכות פורים", Cover = cover, imageResourceId = Resource.Drawable.halkasPurim });
cover = new ImageView(Activity);
cover.SetImageResource(Resource.Drawable.halkasPesach);
mBooks.Add(new Book() { Title = "הלכה כסדרה - הלכות פסח", Cover = cover, imageResourceId= Resource.Drawable.halkasPesach });
cover = new ImageView(Activity);
cover.SetImageResource(Resource.Drawable.netzach);
mBooks.Add(new Book() { Title = "שו\"ת נצח יהודה", Cover = cover , imageResourceId = Resource.Drawable.netzach});
cover = new ImageView(Activity);
cover.SetImageResource(Resource.Drawable.tankim);
mBooks.Add(new Book() { Title = "טיפול בטנקים בשבת", Cover = cover , imageResourceId = Resource.Drawable.tankim});
cover = new ImageView(Activity);
cover.SetImageResource(Resource.Drawable.tipulBeChalalim);
mBooks.Add(new Book() { Title = "טיפול בחללים בשבת", Cover = cover , imageResourceId = Resource.Drawable.tipulBeChalalim});
return view;
}
Hope someone can please help me find out why only the last two items get colored.
Thanks!
Recommended editorial content
With your consent, external content is loaded here.
By clicking on the button above, you agree that external content may be displayed to you. Personal data may be transmitted to third-party providers in the process. You can find more information about this in our Privacy Policy.