2017-09-22 1 views
0

Je veux utiliser la bibliothèque Palette pour choisir une couleur de l'image et ajouter à Vignettes en recyclerview mais mon code est fonctionne pas, je l'utilise aussi glid pour l'image d'affichage du serveur, comment peut résoudre mon problème ou utiliser Palette pour choisir une couleur dans recyclerview? Merci si vous me guider ou me donner un codecomment utiliser la bibliothèque Palette recyclerview

Mon code

public class adapter_zakeran extends 
    RecyclerView.Adapter<adapter_zakeran.ItemViewHolder> { 

private Context mcontax; 
private ArrayList<Item_zakeran> itemlist; 
Item_zakeran item; 

public adapter_zakeran(Context context, ArrayList<Item_zakeran> itemlist) { 
    this.mcontax = context; 
    this.itemlist = itemlist; 
} 

@Override 
public adapter_zakeran.ItemViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 

    LayoutInflater inflater = LayoutInflater.from(parent.getContext()); 
    View view = inflater.from(parent.getContext()) 
      .inflate(R.layout.cardview_list_madahi, parent, false); 
    adapter_zakeran.ItemViewHolder itemViewHolder = new adapter_zakeran.ItemViewHolder(view); 
    return itemViewHolder; 
} 

@Override 
public void onBindViewHolder(final adapter_zakeran.ItemViewHolder holder, int position) { 

    item = itemlist.get(position); 

    final int ids = item.getId(); 

    holder.namemadah.setText(item.getName()); 

    Glide.with(holder.imagelist.getContext()) 
      .load(item.getImage()) 
      .asBitmap() 
      .centerCrop() 
      .into(new SimpleTarget<Bitmap>(1000,1000) { 
       @Override 
       public void onResourceReady(Bitmap bitmap, GlideAnimation glideAnimation) { 
        holder.imagelist.setImageBitmap(bitmap); // Possibly runOnUiThread() 
        Palette.from(bitmap).generate(new Palette.PaletteAsyncListener() { 
         @Override 
         public void onGenerated(Palette palette) { 
          Palette.Swatch darkVibrant = palette.getDarkVibrantSwatch(); 
          if (darkVibrant != null) { 
           holder.cvItem.setBackgroundColor(darkVibrant.getRgb()); 
           holder.namemadah.setBackgroundColor(darkVibrant.getTitleTextColor()); 
          } else { 
           //dark vibrant colors don't exist, you can try to find other swatches 
           //or set a default color.. 
          } 
         } 
        }); 
       } 
      }); 


    holder.itemView.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Intent in = new Intent(v.getContext(), zakeran_any_madah.class); 
      in.putExtra("speaker_id", ids); 
      v.getContext().startActivity(in); 
     } 
    }); 

} 

@Override 
public int getItemCount() { 
    if (itemlist != null) { 
     return itemlist.size(); 

    } 

    return 0; 
} 


public static class ItemViewHolder extends RecyclerView.ViewHolder { 


    public CardView cvItem; 
    public TextView namemadah; 

    public ImageView imagelist; 


    public ItemViewHolder(View itemView) { 
     super(itemView); 

     cvItem = (CardView) itemView.findViewById(R.id.cardView); 
     namemadah = (TextView) itemView.findViewById(R.id.namemadah); 


     imagelist = (ImageView) itemView.findViewById(R.id.imagelist); 


    } 
} 

} 

erreur

FATAL EXCEPTION: main 
Process: com.example.kaveh.zakerinekordestan, PID: 28896 java.lang.NullPointerException 
at com.example.kaveh.zakerinekordestan.adapter_zakeran$1$1.onGenerated(adapter_zakeran.java:81) 
at android.support.v7.graphics.Palette$Builder$1.onPostExecute(Palette.java:873) 
at android.support.v7.graphics.Palette$Builder$1.onPostExecute(Palette.java:860) 
at android.os.AsyncTask.finish(AsyncTask.java:632) 
at android.os.AsyncTask.access$600(AsyncTask.java:177) 
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:645) 
at android.os.Handler.dispatchMessage(Handler.java:102) 
at android.os.Looper.loop(Looper.java:136) 
at android.app.ActivityThread.main(ActivityThread.java:5001) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:515) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601) 
at dalvik.system.NativeStart.main(Native Method) 

Répondre

0

Sur la base de la documentation, il n'y a pas de garanties que tous les échantillons peuvent être extraits d'une image.

Votre code devrait devenir comme suit:

Palette.from(bitmap).generate(new Palette.PaletteAsyncListener() { 
    @Override 
    public void onGenerated(Palette palette) { 
     Palette.Swatch darkVibrant = palette.getDarkVibrantSwatch(); 
     if (darkVibrant != null) { 
       holder.cvItem.setCardBackgroundColor(darkVibrant.getRgb()); 
       holder.namemadah.setTextColor(darkVibrant.getTitleTextColor()); 
     } else { 
      //dark vibrant colors don't exist, you can try to find other swatches 
      //or set a default color..  
     } 
    } 
}); 

Documentation is here

PS: êtes-vous sûr que vous voulez configurer la couleur de fond de votre TextView et non la couleur du texte? parce que dans ce cas, vous devez utiliser setTextColor()

+0

Merci je veux changer la couleur de fond de votre code est Vignettes vigueur à proximité de holder.cvItem.setBackgroundColor (darkVibrant.getRgb()); –

+0

Je ne peux pas vous comprendre ... btw j'ai édité la réponse un peu en utilisant les bonnes méthodes (à mon avis). Vous devez utiliser mon code et définir un point de débogage sur la propriété 'darkVibrant' pour être sûr qu'il n'est pas nul après l'avoir extrait de l'image. Utilisez 'setCardBackgroundColor()' à la place – MatPag

+0

Je suis édité mon code –

0

Pour appliquer arrière-plan Vignettes utilisé Android card.setCardBackgroundColor(color);

si vous voulez changer la couleur par xml, utilisez card_view:cardBackgroundColor="@color/your_color"

Donc, pour votre cas, utilisez

holder.cvItem.setCardBackgroundColor(palette.getDarkVibrantSwatch().getRgb()); 
+0

Je suis utilisé setCardBackgroundColor mais n'est pas travaillé –

+0

Avez-vous chacked que vous obtenez de couleur VIBRANT chaque image de la couleur du temps non extrait de l'image. Il suffit de cocher 'if (palette! = Null)', puis de définir la couleur sur cardview –

+0

@CHANDANSHARMA C'est faux, d'après la documentation, l'objet 'Palette' ne peut pas être nul après la génération. Seuls les échantillons peuvent être nuls – MatPag