android分辨率 x y,Android - 确定不同分辨率的位图上的特定位置(X,Y坐标)?
我正在嘗試創(chuàng)建的應(yīng)用程序是棋盤游戲。它將有一個(gè)位圖作為棋盤和棋子,移動(dòng)到棋盤上的不同位置。該板的一般設(shè)計(jì)是方形的,具有一定數(shù)量的行和列,并具有用于外觀的邊框。想象一下國(guó)際象棋棋盤或拼字游戲板。Android - 確定不同分辨率的位圖上的特定位置(X,Y坐標(biāo))?
在使用位圖之前,我首先通過手動(dòng)繪制它來創(chuàng)建電路板和寄存器 - drawLine & drawRect。我決定了邊框的寬度有多少像素基于“onSizeChanged”中傳遞的屏幕寬度和高度。剩余的屏幕除以我需要的列數(shù)或行數(shù)。
對(duì)于實(shí)施例起見,讓我們說,屏幕尺寸是102 X 102
我可能選擇在1設(shè)置邊界并設(shè)置行數(shù)在10 &列這將使100×100個(gè)左(減去兩個(gè)以考慮頂部&底部邊界以及左/右邊界)。然后將列和行設(shè)置為10,這將為高度和寬度留下10個(gè)像素。
無論通過哪種屏幕尺寸,我都會(huì)存儲(chǔ)寄存器寬度的多少個(gè)像素以及電路板上每個(gè)方塊的高度&。我確切地知道在屏幕上根據(jù)簡(jiǎn)單的公式確定屏幕上的什么位置,并且我確切地知道用戶觸摸什么單元格來進(jìn)行移動(dòng)。
現(xiàn)在如何與位圖一起工作?這意味著,如果我為每個(gè)密度創(chuàng)建3個(gè)不同的背景位圖,它們是不是會(huì)調(diào)整大小以適合每個(gè)設(shè)備的屏幕分辨率,因?yàn)閺奈易x的內(nèi)容來看,不僅有3種屏幕分辨率,而且現(xiàn)在有平板電腦 - 更多。如果我或Android向上或向下縮放位圖以適應(yīng)當(dāng)前設(shè)備的屏幕尺寸,我如何知道邊框的縮放范圍以及每個(gè)方塊的尺寸,以便確定移動(dòng)某個(gè)部分的位置或計(jì)算玩家的位置感動(dòng)。到目前為止,我看過的例子只是展示了如何縮放整體位圖并獲得整體位圖寬度和高度。但是,我沒有看到如何判斷電路板的每個(gè)部分在縮放之后會(huì)有多少像素寬或高。當(dāng)我根據(jù)onSizeChanged的屏幕尺寸繪制每一行和矩形時(shí),我總是知道這些尺寸。
如果任何人有任何示例代碼或URL指向我,我可以就這個(gè)問題與位圖的讀取,我將不勝感激。
順便說一句,這里有一些關(guān)于如何知道我的游戲板(邊框和正方形)尺寸的示例代碼(非常簡(jiǎn)化),無論屏幕尺寸如何。現(xiàn)在我只需要知道如何將這個(gè)與電路板做成一個(gè)可以縮放到任何屏幕尺寸的位圖。
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
intScreenWidth = w;
intScreenHeight = h;
// Set Border width - my real code changes this value based on the dimensions of w
// and h that are passed in. In other words bigger screens get a slightly larger
// border.
intOuterBorder = 1;
/** Reserve part of the board for the boardgame and part for player controls & score
My real code forces this to be square, but this is good enough to get the point
across.
**/
floatBoardHeight = intScreenHeight/4 * 3;
// My real code actually causes floatCellWidth and floatCellHeight to
// be equal (Square).
floatCellWidth = (intScreenWidth - intOuterBorder * 2)/intNumColumns;
floatCellHeight = (floatBoardHeight - intOuterBorder * 2)/intNumRows;
super.onSizeChanged(w, h, oldw, oldh);
}
我想我找到了答案。我可能無法在單個(gè)縮放位圖中找到每個(gè)可播放方塊的確切寬度/高度和位置,但通過查看SDK中的Snake示例,我發(fā)現(xiàn)它不會(huì)為整個(gè)板創(chuàng)建1個(gè)位圖,并且可以縮放它基于屏幕尺寸 - 相反,它會(huì)為每個(gè)圖塊創(chuàng)建一個(gè)位圖,然后根據(jù)屏幕分辨率和屏幕上需要的圖塊數(shù)量來縮放圖塊 - 就像我手動(dòng)繪制圖板時(shí)一樣。使用這種方法,我應(yīng)該能夠找到板上所有可玩方塊的確切像素邊界。我只需要將棋盤分成多個(gè)方塊的位圖。我可能將不得不為邊界做類似的處理,所以我可以在縮放之后檢測(cè)它們的寬度/高度。
現(xiàn)在我將測(cè)試它來驗(yàn)證,但我期望它能夠基于我在Snake SDK示例中看到的工作。
--Mike
我測(cè)試的方式做什么,我是問,它似乎工作。以下是我所做的:
我為電路板創(chuàng)建了一個(gè)320 x 320位圖。它由邊框和方塊組成(像棋盤)。邊框的寬度一直是10個(gè)像素。正方形是20 x 20像素。
我通過onSizeChanged檢測(cè)到屏幕的寬度和高度。在480×800的顯示,我將設(shè)置新的寬度為主板是480×480,并使用下面的代碼來縮放整個(gè)事情:
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
floatBoardWidth = w;
floatBoardHeight = floatBoardWidth;
bitmapScaledBoard = Bitmap.createScaledBitmap(bitmapBoard, (int)floatBoardWidth, (int)floatBoardHeight, true);
super.onSizeChanged(w, h, oldw, oldh);
}
現(xiàn)在,為了檢測(cè)多少個(gè)像素寬的邊界被縮放到了多少個(gè)像素,并且正方形的寬度是多少,我首先計(jì)算了整個(gè)圖像的縮放比例。我知道該位圖是320 x 320,因?yàn)槲覄?chuàng)建了它。我用下面的公式來計(jì)算圖像的縮放比例:
floatBoardScale = floatScreenWidth/320;
對(duì)于480寬度的屏幕,floatBoardScale等于:1.5。然后為了計(jì)算我的邊界在完整位圖內(nèi)的比例,我做了:
floatBorderWidth = 10 * floatBoardScale;
10是我的320 x 320位圖中的原始邊框?qū)挾取T谖业淖罱K代碼中,我不會(huì)硬編碼值,我會(huì)使用變量。無論如何,在這個(gè)公式的情況下,新的計(jì)算出的邊框?qū)挾葢?yīng)該是:15
當(dāng)我將相同的比例因子乘以棋盤格(原始位圖中的20 x 20)時(shí),我得到了30 x 30.當(dāng)我在公式中使用這些值來計(jì)算一個(gè)人碰到什么平方時(shí),它就起作用了。我觸摸廣場(chǎng)的每個(gè)角落,并在中心,并始終計(jì)算出正確的位置。這很重要,所以無論屏幕分辨率如何,我都知道用戶想要移動(dòng)的部分,并在視覺上顯示在正確的位置。
我希望這可以幫助任何可能有同樣問題的人。此外,如果任何人有更好的方法來完成同樣的事情,請(qǐng)張貼它。
2010-11-10
Mike
總結(jié)
以上是生活随笔為你收集整理的android分辨率 x y,Android - 确定不同分辨率的位图上的特定位置(X,Y坐标)?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android 自定义分区,androi
- 下一篇: php 仿高德,仿高德路线规划滑动效果