์๋ ํ์ธ์,
์ด ๋๋ผ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ง์ ๋ ธ๋ ฅ์ ๊ธฐ์ธ์ฌ ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค. ๋๋ ๊ฒฐ๊ณผ์ API์ ๊ฝค ๋ง์กฑํ์ง๋ง ZoomImageView ์์ ๋๋ก์ด๋ธ์ X ๋ฐ Y ์ขํ๋ฅผ ์ป๊ณ ์ถ์ต๋๋ค. ZoomImageView ์์ ๋ช ๊ฐ์ ์์ ๊ทธ๋ฆฌ๊ณ ๋๋ก์ด๋ธ๊ณผ ํจ๊ป ์์ง์ด๊ณ ์ถ์ต๋๋ค. (์ค ํ์๋). ์ง๋(ZoomImageView)๊ฐ ์๊ณ ๊ทธ ์์ ์ฌ์ฉ์๊ฐ ๋ณด๊ธฐ๋ฅผ ํ๋/์ถ์ํ๊ฑฐ๋ ํฌํ ๋ ๋์ผํ ์๋ ์์น๋ฅผ ์ ์งํด์ผ ํ๋ ์ผ๋ถ ํ์ด ์์ผ๋ฏ๋ก ๋ฌธ์ ์ ๋ํด ์๊ฐํด ๋ณด์ญ์์ค. ๋์์ ์ฃผ์๋ฉด ๋๋จํ ๊ฐ์ฌํ๊ฒ ์ต๋๋ค.
๊ฐ์ฌํฉ๋๋ค.
getPanX
๋ฐ getPanY
์ฌ์ฉํ์ฌ ์ขํ๋ฅผ ์ป์ ์ ์์ต๋๋ค.
getPanX
๋ฐgetPanY
์ฌ์ฉํ์ฌ ์ขํ๋ฅผ ์ป์ ์ ์์ต๋๋ค.
์ด๊ฒ์ ์๋ํ์ง๋ง ํฌ์ ๊ฐ์ ธ์ค๋ ๊ฒ์ ํ๋/์ถ์ ๋น์จ์ ๊ณ ๋ คํ์ง ์์ต๋๋ค. ํ๋ํ๋ฉด ์ขํ๊ณ๊ฐ ์ฆํญ๋๋ค๊ณ ์๊ฐํฉ๋๋ค. ํ๋/์ถ์ ๋ฐ ๋ฐฐ์จ๊ณผ ๊ด๋ จํ์ฌ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ด ์์ต๋๊น?
zoom
์์ฑ๊ณผ ๊ณฑํ๋ฉด ๋ฉ๋๋ค.
zoom
์์ฑ๊ณผ ๊ณฑํ๋ฉด ๋ฉ๋๋ค.
ํ๋/์ถ์๋ฅผ ์ํํ๊ณ ๊ณฑ์ ์ ์ํํ๋ฉด ํ๋/์ถ์ ์ค์ฌ ํผ๋ฒ(ํ์น๊ฐ ๋ฐ์ํ๋ ์์น)์ ๊ณ ๋ คํ์ง ์์ผ๋ฏ๋ก ํผ๋ฒ์ ๊ธฐ๋ณธ ์์น๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ชจ๋ ์ขํ๋ฅผ ์ ํ ๋ณํํฉ๋๋ค. ํ์น ์์น์์ ํผ๋ฒ X์ Y๋ฅผ ์ฌ์ค์ ํ๋ ค๊ณ ์๋ํ์ง๋ง ์ด์ด ์์์ต๋๋ค.
ํ๋/์ถ์ ๋ ์ด์์ ์๋จ์ ๋ณด๊ธฐ๊ฐ ์๋์ ์ผ๋ก ๊ณ ์ ๋ ์์น์ ์์ ๋ ํ์น์ ํผ๋ฒ์ ์ด ์ค์ํ ์ด์ ๋ ๋ฌด์์ ๋๊น? ํ๋/์ถ์ ๋ ์ด์์ ํฌ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ์์ชฝ์ผ๋ก ๋ณด๊ธฐ๋ฅผ ์ด๋ํ๋ ๊ฒ์ผ๋ก ์ถฉ๋ถํ์ง ์์ง๋ง ๋ฐ๋๋ก ํด์ผ ํฉ๋๊น? ํ๋/์ถ์ ๋ ์ด์์์ด ํ๋๋๋ฉด(์: ํ๋/์ถ์ > 1) ํ๋/์ถ์ ๋ ์ด์์ ์ขํ๊ฐ ์ฆํญ๋๊ธฐ ๋๋ฌธ์ ์๋จ์ ๋ทฐ ๋ณํ์ ์๋ ํฝ์ ํฌ๊ธฐ๋ณด๋ค ์์์ผ ํฉ๋๋ค. ํ๋/์ถ์ ๋น์จ๋ก ํฌ์ ๋๋ ํ์๊ฐ ์๋ค๊ณ ์๊ฐํ ๊ฒ์ ๋๋ค.
ํ๋/์ถ์ ๋ ์ด์์ ์๋จ์ ๋ณด๊ธฐ๊ฐ ์๋์ ์ผ๋ก ๊ณ ์ ๋ ์์น์ ์์ ๋ ํ์น์ ํผ๋ฒ์ ์ด ์ค์ํ ์ด์ ๋ ๋ฌด์์ ๋๊น? ํ๋/์ถ์ ๋ ์ด์์ ํฌ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ์์ชฝ์ผ๋ก ๋ณด๊ธฐ๋ฅผ ์ด๋ํ๋ ๊ฒ์ผ๋ก ์ถฉ๋ถํ์ง ์์ง๋ง ๋ฐ๋๋ก ํด์ผ ํฉ๋๊น? ํ๋/์ถ์ ๋ ์ด์์์ด ํ๋๋๋ฉด(์: ํ๋/์ถ์ > 1) ํ๋/์ถ์ ๋ ์ด์์ ์ขํ๊ฐ ์ฆํญ๋๊ธฐ ๋๋ฌธ์ ์๋จ์ ๋ทฐ ๋ณํ์ ์๋ ํฝ์ ํฌ๊ธฐ๋ณด๋ค ์์์ผ ํฉ๋๋ค. ํ๋/์ถ์ ๋น์จ๋ก ํฌ์ ๋๋ ํ์๊ฐ ์๋ค๊ณ ์๊ฐํ ๊ฒ์ ๋๋ค.
ํฌ ๋ฐ ํ๋/์ถ์๋ฅผ ์ฌ์ฉํ ๋ ์ค์ฒฉ๋ ๋ ์ด์์์ ํ(zoomLayout ์๋จ)์ ๋๊ฐ์ ์์ ์ ํ ์กฐ์ฎ๊น์ผ๋ก ์กฐ์ฎ๊น๋ฉ๋๋ค. ๋ด๊ฐ ์ฌ๊ธฐ์ ๋งํ๊ณ ์ถ์ ๊ฒ์ ํ์ด ์๋ ์์น๋ฅผ ๊ผฌ์ง๋ ๊ฒฝ์ฐ๊ฐ ์์ผ๋ฏ๋ก ํ์๋ ์ ํ ์กฐ์ฎ๊น์ ํด์๋ ์ ๋์ง๋ง ์ ๊ฒฝ์ฐ์๋ ๊ณฑํ๊ฑฐ๋ ๋๋๋ ๊ฒ์ด ๋๊ฐ์ ์ผ๋ก ์ด๋ํ๋ ๊ฒฝ์ฐ๊ฐ ์์ต๋๋ค. ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ์๋ "onZoomUpdate -> zoom: Float" ๋ฐ "onViewPanUpdate -> float[x,y]"์ ๊ฐ์ ๋ช ๊ฐ์ง ์ฝ๋ฐฑ์ด ์ถ๊ฐ๋์ด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
Markus๊ฐ ๋ง์ต๋๋ค. ํ์ง๋ง zoom
๋์ realZoom
๋ฅผ ์ฌ์ฉํด์ผ ์์ ํฉ๋๋ค.
๋ฐ๋ผ์ panX
๋๋ panX * realZoom
(๋๋ ๊ณ์ฐ์ ๋ฐ๋ผ ๋นผ๊ธฐ)๊ฐ ํ์ํฉ๋๋ค. ์ด๋ป๊ฒ ๊ทธ๋ฆฌ๋๋์ ๋ฐ๋ผ ๋ค๋ฆ
๋๋ค.
๋ํ ๊ทธ๋ฆฌ๋ ๋ฐฉ๋ฒ์ ๋ฐ๋ผ ํ๋ฉด ํฌ๊ธฐ/์ปจํ
์ด๋ ํฌ๊ธฐ์ ๊ฐ์ ๋ค๋ฅธ ์ฌํญ์ ๊ณ ๋ คํด์ผ ํ ์๋ ์์ต๋๋ค. ๊ฒฐ๊ตญ, ๊ทธ๊ฒ์ ์์ ํ ์ํ ๋ฌธ์ ์
๋๋ค. panX
๋ฐ panY
๊ฐ ๋ฌด์์ธ์ง ์ดํดํ์ญ์์ค.
engine.addListener()
๋ฅผ ์ฌ์ฉํ์ฌ ์ฝ๋ฐฑ์ ๋ฐ์ ์๋ ์์ต๋๋ค.
Markus๊ฐ ๋ง์ต๋๋ค. ํ์ง๋ง
zoom
๋์realZoom
๋ฅผ ์ฌ์ฉํด์ผ ์์ ํฉ๋๋ค.๋ฐ๋ผ์
panX
๋๋panX * realZoom
(๋๋ ๊ณ์ฐ์ ๋ฐ๋ผ ๋นผ๊ธฐ)๊ฐ ํ์ํฉ๋๋ค. ์ด๋ป๊ฒ ๊ทธ๋ฆฌ๋๋์ ๋ฐ๋ผ ๋ค๋ฆ ๋๋ค.๋ํ ๊ทธ๋ฆฌ๋ ๋ฐฉ๋ฒ์ ๋ฐ๋ผ ํ๋ฉด ํฌ๊ธฐ/์ปจํ ์ด๋ ํฌ๊ธฐ์ ๊ฐ์ ๋ค๋ฅธ ์ฌํญ์ ๊ณ ๋ คํด์ผ ํ ์๋ ์์ต๋๋ค. ๊ฒฐ๊ตญ, ๊ทธ๊ฒ์ ์์ ํ ์ํ ๋ฌธ์ ์ ๋๋ค.
panX
๋ฐpanY
๊ฐ ๋ฌด์์ธ์ง ์ดํดํ์ญ์์ค.
engine.addListener()
๋ฅผ ์ฌ์ฉํ์ฌ ์ฝ๋ฐฑ์ ๋ฐ์ ์๋ ์์ต๋๋ค.
์ข์ ๊ฒ ๊ฐ์์. ์๋ํด ๋ณด๊ฒ ์ต๋๋ค. ์ ๋ง ๊ฐ์ฌํฉ๋๋ค
@andromedcodes ZoomImageView ๋ด์์ ์ฌ๋ฐ๋ฅธ ๋๋ก์ด๋ธ ์ขํ๋ฅผ ์ป์ ์ ์์์ต๋๊น?
๋ด๊ฐ ์๋ํ ๊ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
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);
ํ์ง๋ง ํฌ ๋ฐ ํ๋/์ถ์ ๊ฐ์ ์กฐ์ ํ๋ ๋ฐฉ๋ฒ์ ์ดํดํ์ง ๋ชปํฉ๋๋ค. ๋์์ ์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค. ๊ฐ์ฌ ํด์
์ด ๋ฌธ์ ๋ ์ง๋ 20์ผ ๋์ ํ๋์ด ์์๊ธฐ ๋๋ฌธ์ ์๋์ผ๋ก ์ค๋๋ ๊ฒ์ผ๋ก ํ์๋์์ต๋๋ค. ํฅํ 7์ผ ์ด๋ด์ ์ถ๊ฐ ํ๋์ด ์์ผ๋ฉด ํ์๋ฉ๋๋ค. ๊ทํ์ ๊ธฐ์ฌ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
Markus๊ฐ ๋ง์ต๋๋ค. ํ์ง๋ง
zoom
๋์realZoom
๋ฅผ ์ฌ์ฉํด์ผ ์์ ํฉ๋๋ค.๋ฐ๋ผ์
panX
๋๋panX * realZoom
(๋๋ ๊ณ์ฐ์ ๋ฐ๋ผ ๋นผ๊ธฐ)๊ฐ ํ์ํฉ๋๋ค. ์ด๋ป๊ฒ ๊ทธ๋ฆฌ๋๋์ ๋ฐ๋ผ ๋ค๋ฆ ๋๋ค.๋ํ ๊ทธ๋ฆฌ๋ ๋ฐฉ๋ฒ์ ๋ฐ๋ผ ํ๋ฉด ํฌ๊ธฐ/์ปจํ ์ด๋ ํฌ๊ธฐ์ ๊ฐ์ ๋ค๋ฅธ ์ฌํญ์ ๊ณ ๋ คํด์ผ ํ ์๋ ์์ต๋๋ค. ๊ฒฐ๊ตญ, ๊ทธ๊ฒ์ ์์ ํ ์ํ ๋ฌธ์ ์ ๋๋ค.
panX
๋ฐpanY
๊ฐ ๋ฌด์์ธ์ง ์ดํดํ์ญ์์ค.engine.addListener()
๋ฅผ ์ฌ์ฉํ์ฌ ์ฝ๋ฐฑ์ ๋ฐ์ ์๋ ์์ต๋๋ค.