Android: как выбрать цвет с помощью палитры для цикла
Я хочу выбрать цвет из изображения, используя палитру.
Во-первых, я разделил свое растровое изображение на 32. Во-вторых, я хочу показать его в виде сетки переработчика с типичным цветом изображения.
Дело А.
нарезать 32 изображения и выбрать цвет
Bitmap org_bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), data.getData()); ArrayList<Integer> colors= new ArrayList<>(); for (int i = 1; i <= 4; i++) { for (int j = 1; j <= 8; j++) { float box_width = width / 8; float box_height = height / 4; float x = startX + (box_width * (j - 1)); float y = startY + (box_height * (i - 1)); Bitmap spot_bitmap = Bitmap.createBitmap(image_bitmap, (int) x, (int) y, (int) box_width, (int) box_height); Palette.from(spot_bitmap).generate(new Palette.PaletteAsyncListener() { public void onGenerated(Palette p) { // Use generated instance Palette.Swatch vibrantSwatch = p.getVibrantSwatch(); if (vibrantSwatch != null) { int rgb = vibrantSwatch.getRgb(); colors.add(rgb) } } }); } } RecyclerView rv_colors= findViewById(R.id.rv_colors); ImageColorAdpater adapter = new ImageGridAdpater(colors); GridLayoutManager layoutManager = new GridLayoutManager(getApplicationContext(), 8); rv_colors.setLayoutManager(layoutManager); rv_colors.setAdapter(adapter);
Дело Б.
срез 32 изображения (MainActivity.java)
Bitmap org_bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), data.getData()); ArrayList<Bitmap> bg_image = new ArrayList<>(); for (int i = 1; i <= 4; i++) { for (int j = 1; j <= 8; j++) { float box_width = width / 8; float box_height = height / 4; float x = startX + (box_width * (j - 1)); float y = startY + (box_height * (i - 1)); Bitmap spot_bitmap = Bitmap.createBitmap(image_bitmap, (int) x, (int) y, (int) box_width, (int) box_height); bg_image.add(spot_bitmap); } } RecyclerView rv_images= findViewById(R.id.rv_images); ImageGridAdpater adapter = new ImageGridAdpater(bg_image, getApplicationContext()); GridLayoutManager layoutManager = new GridLayoutManager(getApplicationContext(), 8); rv_images.setLayoutManager(layoutManager); rv_images.setAdapter(adapter);
выбрать цвет и показать с помощью палитры (ImageGridAdpater .java)
Palette.from(bitmap).generate(new Palette.PaletteAsyncListener() { public void onGenerated(Palette p) { // Use generated instance Palette.Swatch vibrantSwatch = p.getVibrantSwatch(); if (vibrantSwatch != null) { int rgb = vibrantSwatch.getRgb(); holder.item_color_grid_background_ll.setBackgroundColor(rgb); } } }); holder.item_color_grid_ll.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Palette palette = Palette.from(colors.get(position)).generate(); Palette.Swatch vibrantSwatch = palette.getVibrantSwatch(); if (vibrantSwatch != null) { int rgb = vibrantSwatch.getRgb(); holder.item_color_grid_background_ll.setBackgroundColor(rgb); } } });
На самом деле я хочу сделать как случай А. Но это просто выбрать один цвет.
Итак, я пробую Случай Б.
Случай B - я пытался установить фон при просмотре с использованием асинхронной палитры. и если он не может установить цвет, когда я нажимаю элемент установить фон с помощью палитры синхронизации.
но это не работает как я могу это исправить? благодарю вас