Создание вашего ColorPicker - PullRequest
       2

Создание вашего ColorPicker

0 голосов
/ 20 января 2020

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

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

Цветовое колесо

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

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

Приложение для экрана

Вот фрагмент кода, который у меня сейчас есть:

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