Я пишу 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;
}
});