2016-06-14 2 views
1

Сейчас я использую этот код как пользовательский макет в студии android. Но большая проблема заключается в том, что при увеличении до зума он будет увеличиваться в точке 0,0, вместо того, чтобы приближаться к точке пальца.Как ущипнуть масштаб в точке пальца?

https://gist.github.com/anorth/9845602

ответ

3

EDIT: Раздвоенный оригинальную суть и обновлять его, view it here. Это было немного сложнее, чем я думал. Поворотная точка по умолчанию для масштабирования представляет собой центр представления. Для того, чтобы сделать эту работу, я должен был установить вид шарнир к (0,0) и настроить перевод для поворота от жеста пользователя.


Я заметил в вашем onScale() переопределение вы звоните scaleDetector.getScaleFactor(), но вы не вызывая scaleDetector.getFocusX() и scaleDetector.getFocusy(). Эти методы говорят вам, что является фокусом масштабирования. Вам нужно будет вызвать эти методы и получить эту координационную точку (x, y), затем выполнить некоторые вычисления, чтобы вычислить перевод, необходимый для сохранения этой фокальной точки. Вам нужно будет это сделать в своихи dy значениях, чтобы перевод учитывал фокус.

Для расчета перевода вы должны взять фокусную точку и умножить значения x и y на изменение масштабного коэффициента. Это говорит о том, как далеко перемещается точка с заданной координационной точкой (0,0). Таким образом, вы должны вычесть x (обновленный) из x (оригинал) и y (обновленный) из y (оригинал), чтобы получить этот вектор перемещения. Ваши значения перевода - это отрицательные значения вектора. Итак:

scale(delta) = scaleDector.getScaleFactor() -- just the change, not the new scale factor 
translation x = x(focal) - x(focal) * scale(delta) 
translation y = y(focal) - y(focal) * scale(delta) 

Так, очевидно, вы бы добавить эти значения в ваших dx и dy значений для перевода.

+0

Не понимайте, что вы имеете в виду. Не могли бы вы привести пример более подробно. Потому что я новичок в этом, поэтому я не понимаю, что вы говорите. Спасибо –

+0

См. Мой обновленный ответ. –

+0

@KrisLarson: как насчет сброса макета при двойном нажатии? – abcd1234

Смежные вопросы