繁体   English   中英

如何在 android 中加载图像时将调色板加载为 cardView 背景?

[英]How to load color palette as cardView background while images load in android?

我试图在图像加载之前在卡片背景中显示 colors ,与Pinterest相同。 调色板正在实施,但背景保持白色,colors 仅在图像加载前一瞬间出现。

我正在使用Glide库在cardView中加载图像。 一旦打开任何活动,请帮我展示 colors。

我正在使用 Android 调色板库从 ImageView 获取 colors。

Here is my RecyclerView Adapter


public class CoffeeAdapter extends RecyclerView.Adapter<CoffeeAdapter.ViewHolder> implements Filterable{

    private static final String TAG = "RecyclerAdapter";

    private ArrayList<CoffeeItem> coffeeItems;
    ArrayList<CoffeeItem> coffeeItemsAll;
    private Context mContext;
    private FavDB favDB;
    private DownloadDB downloadDB;

    public CoffeeAdapter(ArrayList<CoffeeItem> coffeeItems, Context mContext) {
        this.coffeeItems = coffeeItems;
        this.coffeeItemsAll = new ArrayList<CoffeeItem>(coffeeItems);
        this.mContext = mContext;
        notifyDataSetChanged();

    }

    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        favDB = new FavDB(mContext);
        downloadDB = new DownloadDB(mContext);
        //create table on first
        SharedPreferences prefs = mContext.getSharedPreferences("prefs", mContext.MODE_PRIVATE);
        boolean firstStart = prefs.getBoolean("firstStart", true);
        if (firstStart) {
            createTableOnFirstStart();
            createTableOnFirstStart1();
        }

        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item,
                parent,false);
        return new ViewHolder(view);
    }


    @Override
    public void onBindViewHolder(@NonNull final CoffeeAdapter.ViewHolder holder, int position) {
        final CoffeeItem coffeeItem = coffeeItems.get(position);
        readCursorData(coffeeItem, holder);
        readCursorData1(coffeeItem, holder);

       // Glide.with(mContext).load(coffeeItems.get(position).getUrl()).into(holder.imageView);

        Glide.with(mContext)
                .asBitmap()
                .load(coffeeItems.get(position).getUrl())
                .thumbnail(0.05f)
                .apply(new RequestOptions().override(600,1200))
                .apply(new RequestOptions().diskCacheStrategy(DiskCacheStrategy.ALL))
                .listener(new RequestListener<Bitmap>() {
                    @Override
                    public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Bitmap> target, boolean isFirstResource) {
                        return false;
                    }

                    @Override
                    public boolean onResourceReady(Bitmap resource, Object model, Target<Bitmap> target, DataSource dataSource, boolean isFirstResource) {

                        Palette.from(resource)
                                .generate(new Palette.PaletteAsyncListener() {
                                    @Override
                                    public void onGenerated(@Nullable Palette palette) {
                                        Palette.Swatch darkVibrantSwatch = palette.getDarkVibrantSwatch();
                                        Palette.Swatch dominantSwatch = palette.getDominantSwatch();
                                        Palette.Swatch lightVibrantSwatch = palette.getLightVibrantSwatch();
                                        if (darkVibrantSwatch != null) {

                                            holder.cardView.setCardBackgroundColor(darkVibrantSwatch.getRgb());

                                        }else if (dominantSwatch != null) {

                                            holder.cardView.setCardBackgroundColor(dominantSwatch.getRgb());

                                        }else {

                                            holder.cardView.setCardBackgroundColor(lightVibrantSwatch.getRgb());

                                        }

                                    }
                                });

                        return false;
                    }
                })
                .into(holder.imageView);



        //Picasso.get().load(coffeeItems.get(position).getUrl()).resize(1080,1920).onlyScaleDown().into(holder.imageView);
        //holder.imageView.setImageResource(coffeeItem.getImageResourse());
        holder.titleTextView.setText(coffeeItem.getTitle());

        holder.cardView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(mContext,ViewActivity.class);
                intent.putExtra("image",coffeeItem.getUrl());
                intent.putExtra("title",coffeeItem.getTitle());
                intent.putExtra("tag",coffeeItem.getTag());
                intent.putExtra("resolution", coffeeItem.getResolution());
                intent.putExtra("size",coffeeItem.getSize());
                intent.putExtra("desc",coffeeItem.getDescription());
                intent.putExtra("keyId",coffeeItem.getKey_id());
                intent.putExtra("favStatus",coffeeItem.getFavStatus());
                intent.putExtra("downloadStatus",coffeeItem.getDownloadStatus());

                mContext.startActivity(intent);
            }
        });
    }

Screenshots

这是我的应用程序屏幕

这就是我想要实现的(Pinterest App Screenshot)

将与托盘颜色相关的代码移到 onResourceReady() 之外,并保持 rest 的内容与其相同

public class CoffeeAdapter extends RecyclerView.Adapter<CoffeeAdapter.ViewHolder> implements Filterable{

    private static final String TAG = "RecyclerAdapter";

    private ArrayList<CoffeeItem> coffeeItems;
    ArrayList<CoffeeItem> coffeeItemsAll;
    private Context mContext;
    private FavDB favDB;
    private DownloadDB downloadDB;

    public CoffeeAdapter(ArrayList<CoffeeItem> coffeeItems, Context mContext) {
        this.coffeeItems = coffeeItems;
        this.coffeeItemsAll = new ArrayList<CoffeeItem>(coffeeItems);
        this.mContext = mContext;
        notifyDataSetChanged();

    }

    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        favDB = new FavDB(mContext);
        downloadDB = new DownloadDB(mContext);
        //create table on first
        SharedPreferences prefs = mContext.getSharedPreferences("prefs", mContext.MODE_PRIVATE);
        boolean firstStart = prefs.getBoolean("firstStart", true);
        if (firstStart) {
            createTableOnFirstStart();
            createTableOnFirstStart1();
        }

        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item,
                parent,false);
        return new ViewHolder(view);
    }


    @Override
    public void onBindViewHolder(@NonNull final CoffeeAdapter.ViewHolder holder, int position) {
        final CoffeeItem coffeeItem = coffeeItems.get(position);
        readCursorData(coffeeItem, holder);
        readCursorData1(coffeeItem, holder);


       Palette.from(resource)
       .generate(new Palette.PaletteAsyncListener() {
         @Override
         public void onGenerated(@Nullable Palette palette) {
         Palette.Swatch darkVibrantSwatch = palette.getDarkVibrantSwatch();
         Palette.Swatch dominantSwatch = palette.getDominantSwatch();
         Palette.Swatch lightVibrantSwatch = palette.getLightVibrantSwatch();
         if (darkVibrantSwatch != null) {
             holder.cardView.setCardBackgroundColor(darkVibrantSwatch.getRgb());
         } else if (dominantSwatch != null) {

             holder.cardView.setCardBackgroundColor(dominantSwatch.getRgb());

         } else {

             holder.cardView.setCardBackgroundColor(lightVibrantSwatch.getRgb());

            }

          }
       });

       // Glide.with(mContext).load(coffeeItems.get(position).getUrl()).into(holder.imageView);

        Glide.with(mContext)
                .asBitmap()
                .load(coffeeItems.get(position).getUrl())
                .thumbnail(0.05f)
                .apply(new RequestOptions().override(600,1200))
                .apply(new RequestOptions().diskCacheStrategy(DiskCacheStrategy.ALL))
                .listener(new RequestListener<Bitmap>() {
                    @Override
                    public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Bitmap> target, boolean isFirstResource) {
                        return false;
                    }

                    @Override
                    public boolean onResourceReady(Bitmap resource, Object model, Target<Bitmap> target, DataSource dataSource, boolean isFirstResource) {
                        return false;
                    }
                })
                .into(holder.imageView);



        //Picasso.get().load(coffeeItems.get(position).getUrl()).resize(1080,1920).onlyScaleDown().into(holder.imageView);
        //holder.imageView.setImageResource(coffeeItem.getImageResourse());
        holder.titleTextView.setText(coffeeItem.getTitle());

        holder.cardView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(mContext,ViewActivity.class);
                intent.putExtra("image",coffeeItem.getUrl());
                intent.putExtra("title",coffeeItem.getTitle());
                intent.putExtra("tag",coffeeItem.getTag());
                intent.putExtra("resolution", coffeeItem.getResolution());
                intent.putExtra("size",coffeeItem.getSize());
                intent.putExtra("desc",coffeeItem.getDescription());
                intent.putExtra("keyId",coffeeItem.getKey_id());
                intent.putExtra("favStatus",coffeeItem.getFavStatus());
                intent.putExtra("downloadStatus",coffeeItem.getDownloadStatus());

                mContext.startActivity(intent);
            }
        });
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM