У меня есть классический ImageView
, который изменен для его родителя с match_parent
по обеим осям и scaleType
равен fitCenter
.Сенсорные координаты в центрированном и масштабированном ImageView
координаты, которые я получаю из-за onTouch
события, однако, по сравнению с пределами ImageView
. Как я могу преобразовать их в соответствие с границами самого изображения?
UPDATE
Я закончил тем, что делал это вручную. Это в Scala, но, возможно, легко перевести на Java:
// Long press on the screen adds a new interaction at that position
screenView onTouch {
(v: View, ev: MotionEvent) => {
// Create the image transformation matrix
val m = screenView.getImageMatrix
val d = screenView.getDrawable
val drawableRect = new RectF(0, 0, d.getIntrinsicWidth, d.getIntrinsicHeight)
val viewRect = new RectF(0, 0, screenView.getWidth, screenView.getHeight)
m.setRectToRect(drawableRect, viewRect, Matrix.ScaleToFit.CENTER)
m.invert(m)
// Convert the points inside the image
val points = Array(ev.getX, ev.getY)
m mapPoints points
// Compute normalized coordinates
current_x = points(0)/d.getIntrinsicWidth
current_y = points(1)/d.getIntrinsicHeight
// Only continue if we touched inside the image
!(current_x >= 0 && current_x <= 1 &&
current_y >= 0 && current_y <= 1)
}
}
Я думал, что в Android API будет метод. Вы знаете что-нибудь? Если нет, неважно, я сделаю это вручную. Но я бы предпочел что-то более общее ... –
Хорошо, спасибо в любом случае, см. Обновленный вопрос о том, как я это сделал;) –
Извините, я не знаком с каким-либо таким API. – tbkn23