Android: как выбрать цвет с помощью палитры для цикла

Я хочу выбрать цвет из изображения, используя палитру.

Во-первых, я разделил свое растровое изображение на 32. Во-вторых, я хочу показать его в виде сетки переработчика с типичным цветом изображения.

  • Дело А.

    1. нарезать 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);
      
  • Дело Б.

    1. срез 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);
      
    2. выбрать цвет и показать с помощью палитры (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 - я пытался установить фон при просмотре с использованием асинхронной палитры. и если он не может установить цвет, когда я нажимаю элемент установить фон с помощью палитры синхронизации.

но это не работает как я могу это исправить? благодарю вас

0 ответов

Другие вопросы по тегам