Android - Установите фокус на круг, который я нарисовал в своем методе onDraw - PullRequest
0 голосов
/ 12 июля 2011

Android Вопрос. Я сделал собственный класс ImageView, и внутри него у меня есть метод onDraw, который нарисует круг на определенных пикселях (используя холст). Когда я использую этот пользовательский просмотр изображений и открываю свое изображение, я хотел бы установить фокус на нарисованном мною круге (например, как это делают карты Google с вашим текущим местоположением. Фокус установлен на текущую точку)

1 Ответ

0 голосов
/ 13 июля 2011

Что делает картографический сервер в Google, так это доставляет настроенный набор плиток, чтобы центр отображался правильно, более новая версия, конечно же, основана на векторах, поэтому они просто рисуют вид так, чтобы он центрировался там, где им нужно.

Не зная деталей вашего приложения, вам, вероятно, понадобится

Создайте свой собственный класс контейнера, возможно FrameLayout

public class myMapFrameLayout extends FrameLayout {

Переопределение onDraw или onDispatchDraw, чтобы вы могли правильно расположить плитку

Выясните, где нарисовать ваше растровое изображение так, чтобы нужные вам координаты x, y находились в центре экрана, затем нарисуйте другие плитки, которые вам нужны, чтобы заполнить пустое пространство в требуемых координатах, в зависимости от того, каким образом плитка была перемещена в центр

Представьте себе виртуальный экран, который больше, чем реальный экран с плитками вокруг него, которые имеют одинаковый размер

1 2 3

4 X 5

6 7 8

Предполагая, что X - это размер экрана и представляет текущую плитку, вам нужно выяснить, в какую сторону перемещать плитку и какие другие плитки 1,2,3,4,5,6,7 или 8 вам нужны. заполнить пустое пространство, вызванное ходом

Если вам нужно было нарисовать плитку + x от 0,0, вам нужно немного плитки 4, рисование + y от 0,0 означает, что некоторые из 2 и оба значения 1,2,4 необходимы, и так далее, так что выясните комбинации и загрузите плитки, которые вам нужны, и выясните расположение рисунков каждого. Это даст вам новую виртуальную плитку с отображенным центром.

Это почти так же эффективно, как я думаю, используя метод растрового рисования на стороне клиента.

ОБНОВЛЕНИЕ

Так как ваш комментарий указывает на то, что у вас есть только одно очень большое изображение, это будет небольшой проблемой, если вам нужно, чтобы x, y были как можно ближе к краям, чем размер дисплея

Тем не менее, вы все равно можете нарисовать изображение там, где оно вам нужно, просто измерьте экран и нарисуйте растровое изображение с целью x, y в центре

Так, если экран был 500x500, а ваше изображение было 5000x5000, а центр находился в положении x = 1000 y = 1000, тогда

drawBitmap(Bitmap bitmap, Rect src, RectF dst, Paint paint)

, где исходный прямоугольник будет 1000-250,1000-250,500,500, а прямоугольник dst будет 0,050000

250 - это центр x и центр y дисплея, 1000 - координаты цели x / y, а 500 - размер дисплея.

Опять же, с целями, которые находятся по краям, у вас будет пустой многоугольник на вашем экране, поскольку у вас нет плитки бесконечной карты

В качестве альтернативы вы можете увеличить размер рамки, используя layoutparams, и просто перевести холст в x и y, чтобы холст был центрирован по x, y вам нужно использовать аналогичные calcs, которые могут быть более производительными, не совсем уверенными

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...