Oi,
Muito obrigado por trabalhar duro nesta biblioteca incrível. Estou muito satisfeito com o resultado e a API, no entanto, gostaria de obter as coordenadas X e Y do drawable dentro do ZoomImageView porque desenho alguns círculos no topo do ZoomImageView e gostaria que eles se movessem junto com o drawable (após o zoom também). Pense no problema, pois você tem um mapa (ZoomImageView) e, acima dele, alguns pinos que devem manter a mesma posição relativa quando o usuário aumentar / diminuir o zoom ou panoramizar a visualização. Qualquer ajuda será muito apreciada.
Obrigada.
Você pode obter as coordenadas usando getPanX
e getPanY
.
Você pode obter as coordenadas usando
getPanX
egetPanY
.
isso funcionaria, mas obter o panorama não considera o fator de escala de zoom. Acredito que o sistema de coordenadas é ampliado quando aumenta o zoom. Existe alguma outra maneira de fazer isso em relação ao zoom e ao fator de escala?
Acho que você pode simplesmente multiplicar pela propriedade zoom
.
Acho que você pode simplesmente multiplicar pela propriedade
zoom
.
Não é preciso como obter o zoom e fazer a multiplicação não considerará o pivô central do zoom (onde o aperto está acontecendo), portanto, isso traduziria linearmente todas as coordenadas com base na posição padrão do pivô. Tentei redefinir o pivô X e Y na posição de aperto, mas não tive sorte.
Por que o ponto de pivô da pinça é importante quando as visualizações na parte superior do layout de zoom têm uma posição fixa em relação a ele? Não deveria ser suficiente mover as visualizações na parte superior exatamente como a panorâmica do layout de zoom, mas ao contrário? Quando o layout de zoom é ampliado (ou seja, zoom> 1), a tradução das visualizações no topo precisa ser menor do que o tamanho do pixel original porque, como você disse, as coordenadas do layout de zoom serão amplificadas (no topo da minha cabeça I pensaria que você só precisa dividir o panorama pelo fator de zoom).
Por que o ponto de pivô da pinça é importante quando as visualizações na parte superior do layout de zoom têm uma posição fixa em relação a ele? Não deveria ser suficiente mover as visualizações na parte superior exatamente como a panorâmica do layout de zoom, mas ao contrário? Quando o layout de zoom é ampliado (ou seja, zoom> 1), a tradução das visualizações no topo precisa ser menor do que o tamanho do pixel original porque, como você disse, as coordenadas do layout de zoom serão amplificadas (no topo da minha cabeça I pensaria que você só precisa dividir o panorama pelo fator de zoom).
Ao usar a panorâmica e o zoom, os pinos do layout sobreposto (no topo do zoomLayout) são transpostos na diagonal como uma transposição linear. O que eu quero dizer aqui é que algumas vezes você belisca na posição onde o pino está localizado, portanto, este último não deve transpor de forma alguma, mas no meu caso se multiplicando ou dividindo ele apenas se desloca na diagonal. Além de tudo isso, acho que esta biblioteca precisa de alguns retornos de chamada a serem adicionados, como "onZoomUpdate -> zoom: Float" e "onViewPanUpdate -> float [x, y]"
Markus está certo, mas em vez de zoom
você deve usar realZoom
para estar seguro.
Portanto, ou você precisa de panX
ou panX * realZoom
(ou menos isso, dependendo de seus cálculos). Depende de como você os está desenhando.
Além disso, dependendo de como você está desenhando, você pode ter que levar outras coisas em consideração, como o tamanho da tela / tamanho do contêiner. No final das contas, é puramente um problema de matemática, apenas certifique-se de entender o que são panX
e panY
.
Você também pode usar engine.addListener()
para receber chamadas de retorno.
Markus está certo, mas em vez de
zoom
você deve usarrealZoom
para estar seguro.Portanto, ou você precisa de
panX
oupanX * realZoom
(ou menos isso, dependendo de seus cálculos). Depende de como você os está desenhando.Além disso, dependendo de como você está desenhando, você pode ter que levar outras coisas em consideração, como o tamanho da tela / tamanho do contêiner. No final das contas, é puramente um problema de matemática, apenas certifique-se de entender o que são
panX
epanY
.Você também pode usar
engine.addListener()
para receber chamadas de retorno.
Parece bom, vou tentar. Muito obrigado
@andromedcodes você conseguiu obter as coordenadas corretas de drawable dentro do ZoomImageView?
Aqui está o que eu tentei:
ZoomImageView imgScreen;
Matrix m = new Matrix(imgScreen.getImageMatrix());
Drawable d = imgScreen.getDrawable();
RectF drawableRect = new RectF(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight());
RectF viewRect = new RectF(0, 0, imgScreen.getWidth(), imgScreen.getHeight());
m.setRectToRect(drawableRect, viewRect, Matrix.ScaleToFit.CENTER);
m.invert(m);
// Convert the points inside the image
float[] points = new float[2];
points[0] = event.getX(); //holds x coordinate of drawable
points[1] = event.getY(); //holds y coordinate of drawable
m.mapPoints(points);
Mas não entendo como ajustar os valores de panorâmica e zoom aqui. Qualquer ajuda seria apreciada. Obrigado
Este problema foi marcado automaticamente como obsoleto porque não teve atividade nos últimos 20 dias. Ele será fechado se nenhuma outra atividade ocorrer nos próximos sete dias. Obrigado por suas contribuições.
Comentários muito úteis
Markus está certo, mas em vez de
zoom
você deve usarrealZoom
para estar seguro.Portanto, ou você precisa de
panX
oupanX * realZoom
(ou menos isso, dependendo de seus cálculos). Depende de como você os está desenhando.Além disso, dependendo de como você está desenhando, você pode ter que levar outras coisas em consideração, como o tamanho da tela / tamanho do contêiner. No final das contas, é puramente um problema de matemática, apenas certifique-se de entender o que são
panX
epanY
.Você também pode usar
engine.addListener()
para receber chamadas de retorno.