Выберите содержимое внутри ImageView - Android

У меня есть Activity, содержащий ImageView, и я хотел бы позволить пользователю выбирать часть его содержимого с помощью возможностей касания (или щелчка мыши).

Я хотел бы написать процедуру, способную достичь двух целей:

  1. Нарисуйте выделенное окно над выбранными частями изображения
  2. Возвращает объект, содержащий координаты выбранных (выделенных) пикселей.

Для лучшего понимания вы можете проверить небольшой макет, который я создал:

введите здесь описание изображения

Пользователь должен коснуться экрана над какой-либо частью изображения, и она должна быть выделена. При нажатии кнопки «Назад» я хотел бы получить через Java координаты выделенных пикселей.

Можете ли вы помочь мне понять, как это сделать?

В частности, я хотел бы узнать следующее:

  1. должен ли я получить доступ к информации об уровне пикселей изображения?
  2. какие классы нужны для реализации этой функциональности?
  3. какая-то идея псевдокода?

Спасибо за любую помощь!


person Matteo    schedule 03.07.2012    source источник
comment
-1 голос против Я знаю, что это старо, но мне нужно сделать в основном то же самое, у меня есть ImageView с яйцевидным объектом, и я хочу вызывать метод только тогда, когда пользователь нажимает на размеры, содержащие объект, а не на весь ImageVIEW. Я вижу ответ здесь, но до сих пор не могу понять, как отличить, щелкнул ли пользователь объект, который я хотел бы внутри ImageView, или пустую область в ImageView.   -  person Binev    schedule 30.01.2016


Ответы (1)


Я бы создал подкласс ImageView, тогда вы можете фиксировать события касания, переопределяя onTouchEvent(...)

Когда вы доберетесь до метода onDraw(...), вы можете вызвать super, чтобы нарисовать изображение как обычно, а затем добавить свой собственный код, чтобы нарисовать блик поверх.

ИЗМЕНИТЬ

Что ж, вместо использования ImageView вы можете расширить его и написать свой собственный класс, все, что нужно сделать этому классу, — это переопределить onTouchEvent(...), чтобы вы знали, когда происходит прикосновение к представлению, и могли сохранять местоположение на экране событий касания. Затем вы редактируете методы рисования:

@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas); // So the image you want is drawn as normal

    myMethodForDrawingAFancyHighlight(Canvas canvas); // add your special effects on top of the image
}
person ScouseChris    schedule 03.07.2012
comment
Спасибо за быстрый ответ, но не могли бы вы помочь мне лучше понять? Я новичок... - person Matteo; 03.07.2012
comment
Я понимаю! Просто еще один технический вопрос, который у меня есть: координаты, которые сохраняются при захвате события касания, будут относиться к экрану или к пикселям в изображении? Потому что именно последние я хочу запомнить (пиксельные )! Если нет, есть ли у вас какие-либо предложения по решению проблемы? - person Matteo; 03.07.2012
comment
Это будут пиксели относительно вида, а не изображения. Я бы предложил попытаться вычислить пиксели в изображении, посмотрев, сколько было применено прокрутки или какие смещения изображения используются на холсте и т. д. Удачи. - person ScouseChris; 03.07.2012