android分辨率 x y,Android - 确定不同分辨率的位图上的特定位置(X,Y坐标)?
我正在嘗試創(chuàng)建的應用程序是棋盤游戲。它將有一個位圖作為棋盤和棋子,移動到棋盤上的不同位置。該板的一般設計是方形的,具有一定數(shù)量的行和列,并具有用于外觀的邊框。想象一下國際象棋棋盤或拼字游戲板。Android - 確定不同分辨率的位圖上的特定位置(X,Y坐標)?
在使用位圖之前,我首先通過手動繪制它來創(chuàng)建電路板和寄存器 - drawLine & drawRect。我決定了邊框的寬度有多少像素基于“onSizeChanged”中傳遞的屏幕寬度和高度。剩余的屏幕除以我需要的列數(shù)或行數(shù)。
對于實施例起見,讓我們說,屏幕尺寸是102 X 102
我可能選擇在1設置邊界并設置行數(shù)在10 &列這將使100×100個左(減去兩個以考慮頂部&底部邊界以及左/右邊界)。然后將列和行設置為10,這將為高度和寬度留下10個像素。
無論通過哪種屏幕尺寸,我都會存儲寄存器寬度的多少個像素以及電路板上每個方塊的高度&。我確切地知道在屏幕上根據(jù)簡單的公式確定屏幕上的什么位置,并且我確切地知道用戶觸摸什么單元格來進行移動。
現(xiàn)在如何與位圖一起工作?這意味著,如果我為每個密度創(chuàng)建3個不同的背景位圖,它們是不是會調(diào)整大小以適合每個設備的屏幕分辨率,因為從我讀的內(nèi)容來看,不僅有3種屏幕分辨率,而且現(xiàn)在有平板電腦 - 更多。如果我或Android向上或向下縮放位圖以適應當前設備的屏幕尺寸,我如何知道邊框的縮放范圍以及每個方塊的尺寸,以便確定移動某個部分的位置或計算玩家的位置感動。到目前為止,我看過的例子只是展示了如何縮放整體位圖并獲得整體位圖寬度和高度。但是,我沒有看到如何判斷電路板的每個部分在縮放之后會有多少像素寬或高。當我根據(jù)onSizeChanged的屏幕尺寸繪制每一行和矩形時,我總是知道這些尺寸。
如果任何人有任何示例代碼或URL指向我,我可以就這個問題與位圖的讀取,我將不勝感激。
順便說一句,這里有一些關于如何知道我的游戲板(邊框和正方形)尺寸的示例代碼(非常簡化),無論屏幕尺寸如何?,F(xiàn)在我只需要知道如何將這個與電路板做成一個可以縮放到任何屏幕尺寸的位圖。
@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);
}
我想我找到了答案。我可能無法在單個縮放位圖中找到每個可播放方塊的確切寬度/高度和位置,但通過查看SDK中的Snake示例,我發(fā)現(xiàn)它不會為整個板創(chuàng)建1個位圖,并且可以縮放它基于屏幕尺寸 - 相反,它會為每個圖塊創(chuàng)建一個位圖,然后根據(jù)屏幕分辨率和屏幕上需要的圖塊數(shù)量來縮放圖塊 - 就像我手動繪制圖板時一樣。使用這種方法,我應該能夠找到板上所有可玩方塊的確切像素邊界。我只需要將棋盤分成多個方塊的位圖。我可能將不得不為邊界做類似的處理,所以我可以在縮放之后檢測它們的寬度/高度。
現(xiàn)在我將測試它來驗證,但我期望它能夠基于我在Snake SDK示例中看到的工作。
--Mike
我測試的方式做什么,我是問,它似乎工作。以下是我所做的:
我為電路板創(chuàng)建了一個320 x 320位圖。它由邊框和方塊組成(像棋盤)。邊框的寬度一直是10個像素。正方形是20 x 20像素。
我通過onSizeChanged檢測到屏幕的寬度和高度。在480×800的顯示,我將設置新的寬度為主板是480×480,并使用下面的代碼來縮放整個事情:
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)在,為了檢測多少個像素寬的邊界被縮放到了多少個像素,并且正方形的寬度是多少,我首先計算了整個圖像的縮放比例。我知道該位圖是320 x 320,因為我創(chuàng)建了它。我用下面的公式來計算圖像的縮放比例:
floatBoardScale = floatScreenWidth/320;
對于480寬度的屏幕,floatBoardScale等于:1.5。然后為了計算我的邊界在完整位圖內(nèi)的比例,我做了:
floatBorderWidth = 10 * floatBoardScale;
10是我的320 x 320位圖中的原始邊框?qū)挾?。在我的最終代碼中,我不會硬編碼值,我會使用變量。無論如何,在這個公式的情況下,新的計算出的邊框?qū)挾葢撌?#xff1a;15
當我將相同的比例因子乘以棋盤格(原始位圖中的20 x 20)時,我得到了30 x 30.當我在公式中使用這些值來計算一個人碰到什么平方時,它就起作用了。我觸摸廣場的每個角落,并在中心,并始終計算出正確的位置。這很重要,所以無論屏幕分辨率如何,我都知道用戶想要移動的部分,并在視覺上顯示在正確的位置。
我希望這可以幫助任何可能有同樣問題的人。此外,如果任何人有更好的方法來完成同樣的事情,請張貼它。
2010-11-10
Mike
總結
以上是生活随笔為你收集整理的android分辨率 x y,Android - 确定不同分辨率的位图上的特定位置(X,Y坐标)?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android 自定义分区,androi
- 下一篇: android预加载app,Androi