Android: как выбрать цвет с помощью палитры для цикла - PullRequest
0 голосов
/ 20 сентября 2018

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

Во-первых, я разделил свое растровое изображение на 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);
      
  • Дело B.

    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);
              }
      
          }
      });
      

На самом деле я хочу сделать как случай А. Но это просто выбрать один цвет.

Итак, я пытаюсь CaseB.

Случай B - я пытался установить фон при просмотре с привязкой с использованием асинхронной палитры.и если он не может установить цвет, когда я щелкаю элемент, устанавливающий фон, используя синхронизацию палитры.

, но это не работает.как я могу это исправить?спасибо

...