Есть ли способ получитьPixel(x,y) без растрового изображения?

Пирог

Всем привет. Итак, вчера я задал вопрос о кнопках нестандартной формы, и за него проголосовали. С тех пор я провел больше исследований и думаю, что готов спросить что-то более конкретное.

По сути, мне нужно превратить каждую часть этого пирога в кнопку. Круговая диаграмма представляет собой путь SVG, нарисованный с помощью VectorDrawable, и является ресурсом Drawable в ImageView. Причина, по которой я не использую растровое изображение, заключается в том, что я хочу, чтобы эта диаграмма была масштабируемой.

Я искал решение повсюду. Я думал замаскировать пирог прозрачным пирогом, нарисованным с помощью PathShape, и каким-то образом превратить его в кнопку, но это не сработало, потому что Drawables не кликабельны. Кто-то предложил Android Radial Menu, но я подумал, что просто пытаюсь реализовать 6 кнопок. Должен быть более простой способ.

Затем я понял, что решительно нарисовал свой пирог такими яркими цветами, и подумал об использовании OnTouchListener для вызова 6 разных вещей, которые я хочу сделать, в зависимости от того, к какому цвету прикоснулся пользователь. Я подумал, что это блестящая идея. Но я столкнулся с препятствием, потому что getPixel() нужно использовать на растровом изображении.

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

Любые другие предложения о том, как решить мою проблему, также будут оценены.

Спасибо.


person skwear    schedule 08.04.2016    source источник
comment
... in an ImageView that doesn't actually have a bitmap Все, что вы отображаете в ImageView, предварительно преобразуется в растровое изображение. Так... что ты спрашиваешь?   -  person Phantômaxx    schedule 09.04.2016
comment
Это действительно так? Я думал, что идея ImageView и растрового изображения заключается в том, что ImageView похож на рамку изображения, а растровое изображение — это растровый ресурс, который при вызове рисуется на рамке изображения. Но мой SVG — это вектор, а не растр. Чтобы получить цвет пикселя с помощью OnTouchListener, должна быть переменная в строках int pixel = bitmap.getPixel(x,y);, но у меня нет растрового изображения. Или ты хочешь сказать, что я делаю? Если я коснулся красного кусочка пирога, как я могу заставить OnTouch вернуть #FF0000?   -  person skwear    schedule 09.04.2016
comment
Нет, ImageView — это canvas, и он всегда содержит растровое изображение (также известное как Bitmap). SVG сначала преобразуется в растровое изображение, а затем рисуется в ImageView. У вас всегда есть растровое изображение в ImageView. Или ничего. Итак, вам нужно получить растровое изображение из вашего ImageView. Затем из этого растрового изображения извлеките цвет по указанной координате. Я бы выбрал готовую библиотеку. Может быть, изменить его, если он не удовлетворяет меня на 100%.   -  person Phantômaxx    schedule 09.04.2016
comment
Я понимаю. Хорошо, теперь это имеет смысл. Спасибо @BobMalooga за то, что тренировал меня вчера и сегодня. Большое спасибо. Я определенно учусь.   -  person skwear    schedule 09.04.2016