Zoomlayout: ๋“œ๋กœ์–ด๋ธ” ์ขŒํ‘œ ๊ฐ€์ ธ์˜ค๊ธฐ

์— ๋งŒ๋“  2019๋…„ 02์›” 15์ผ  ยท  10์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: natario1/ZoomLayout

์•ˆ๋…•ํ•˜์„ธ์š”,

์ด ๋†€๋ผ์šด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๋งŽ์€ ๋…ธ๋ ฅ์„ ๊ธฐ์šธ์—ฌ ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ฒฐ๊ณผ์™€ API์— ๊ฝค ๋งŒ์กฑํ•˜์ง€๋งŒ ZoomImageView ์•ˆ์— ๋“œ๋กœ์–ด๋ธ”์˜ X ๋ฐ Y ์ขŒํ‘œ๋ฅผ ์–ป๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ZoomImageView ์œ„์— ๋ช‡ ๊ฐœ์˜ ์›์„ ๊ทธ๋ฆฌ๊ณ  ๋“œ๋กœ์–ด๋ธ”๊ณผ ํ•จ๊ป˜ ์›€์ง์ด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. (์คŒ ํ›„์—๋„). ์ง€๋„(ZoomImageView)๊ฐ€ ์žˆ๊ณ  ๊ทธ ์œ„์— ์‚ฌ์šฉ์ž๊ฐ€ ๋ณด๊ธฐ๋ฅผ ํ™•๋Œ€/์ถ•์†Œํ•˜๊ฑฐ๋‚˜ ํŒฌํ•  ๋•Œ ๋™์ผํ•œ ์ƒ๋Œ€ ์œ„์น˜๋ฅผ ์œ ์ง€ํ•ด์•ผ ํ•˜๋Š” ์ผ๋ถ€ ํ•€์ด ์žˆ์œผ๋ฏ€๋กœ ๋ฌธ์ œ์— ๋Œ€ํ•ด ์ƒ๊ฐํ•ด ๋ณด์‹ญ์‹œ์˜ค. ๋„์›€์„ ์ฃผ์‹œ๋ฉด ๋Œ€๋‹จํžˆ ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

question stale

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

Markus๊ฐ€ ๋งž์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ zoom ๋Œ€์‹  realZoom ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ์•ˆ์ „ํ•ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ panX ๋˜๋Š” panX * realZoom (๋˜๋Š” ๊ณ„์‚ฐ์— ๋”ฐ๋ผ ๋นผ๊ธฐ)๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์–ด๋–ป๊ฒŒ ๊ทธ๋ฆฌ๋Š๋ƒ์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

๋˜ํ•œ ๊ทธ๋ฆฌ๋Š” ๋ฐฉ๋ฒ•์— ๋”ฐ๋ผ ํ™”๋ฉด ํฌ๊ธฐ/์ปจํ…Œ์ด๋„ˆ ํฌ๊ธฐ์™€ ๊ฐ™์€ ๋‹ค๋ฅธ ์‚ฌํ•ญ์„ ๊ณ ๋ คํ•ด์•ผ ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฒฐ๊ตญ, ๊ทธ๊ฒƒ์€ ์ˆœ์ „ํžˆ ์ˆ˜ํ•™ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. panX ๋ฐ panY ๊ฐ€ ๋ฌด์—‡์ธ์ง€ ์ดํ•ดํ•˜์‹ญ์‹œ์˜ค.

engine.addListener() ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฝœ๋ฐฑ์„ ๋ฐ›์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  10 ๋Œ“๊ธ€

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์ผ ์ด๋‚ด์— ์ถ”๊ฐ€ ํ™œ๋™์ด ์—†์œผ๋ฉด ํ์‡„๋ฉ๋‹ˆ๋‹ค. ๊ท€ํ•˜์˜ ๊ธฐ์—ฌ์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰