Написание своего ColorPicker

110
01 марта 2022, 09:50

Всем привет. Пишу приложение на android для управления LED-лампой и для этого возникла задача сделать Color Picker который будет регулировать теплый и холодный белые цвета.

Для этого у меня есть цветовой круг такого плана:

Я понимаю что проще было бы сделать все в виде полосы, например как в SeekBar, но дизайн приложения требует именно круг =)

Я не очень понимаю как сделать так, чтобы курсор, который будет находится поверх данного круга, не выходил за его пределы.

Привожу кусок кода, который на данный момент у меня имеется:

    cursor = findViewById(R.id.cursor);
    info = findViewById(R.id.info);
    imageView = findViewById(R.id.colorWheel);
    imageView.invalidate();
    BitmapDrawable drawable = (BitmapDrawable) imageView.getDrawable();
    final Bitmap bitmap = drawable.getBitmap();
    float radius = Math.min(bitmap.getWidth() / 2, bitmap.getHeight() / 2);
    Log.d(getClass().getSimpleName(), "width: " + bitmap.getWidth());
    Log.d(getClass().getSimpleName(), "height: " + bitmap.getHeight());
    Log.d(getClass().getSimpleName(), "onCreate: radius = " + radius);

    imageView.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            ImageView img = (ImageView) v;
            final int evX = (int) event.getX();
            final int evY = (int) event.getY();
            cursor.setTranslationX(evX);
            cursor.setTranslationY(evY);
            info.setText("x: " + evX + "; y: " + evY);
            Log.d(getClass().getSimpleName(), "x: " + evX + "; y: " + evY);
            img.setDrawingCacheEnabled(true);
            Bitmap imgbmp = Bitmap.createBitmap(img.getDrawingCache());
            img.setDrawingCacheEnabled(false);
            try {
                int pxl = imgbmp.getPixel(evX, evY);
                Log.d(getClass().getSimpleName(), "Red = " + Color.red(pxl)
                        + "; Green = " + Color.green(pxl) + "; Blue = " + Color.blue(pxl));
                //pickedColorView.setBackgroundColor(pxl);
            } catch (Exception ignore) {
            }
            imgbmp.recycle();
            return true;
        }
    });
READ ALSO
JavaFX Создание копии объекта

JavaFX Создание копии объекта

Имеется конструктор, который получает какой-либо объект наследуемый от Node, те

134
SVG Как анимировать linearGradient?

SVG Как анимировать linearGradient?

Как создать анимацию для градиента SVG?

140
Подбор суммируемых констант

Подбор суммируемых констант

Необходимо сделать константы по сумме которых можно было бы определить что там лежит, как пример можно рассмотреть PHP JSON CONSTANT https://wwwphp

80
Ошибки при работе с google/cloud-vision PHP - Fail to push limit

Ошибки при работе с google/cloud-vision PHP - Fail to push limit

Установил google/cloud-vision через композер Устанавливаю переменную окружения с путем до файла с ключем, выполняю код из примера:

307