2011-04-08 65 views
5

我擁有絕對佈局元素中的人臉圖像(250px X 250px)。我目前獲得用戶的觸摸座標,並使用一些數學計算已觸摸的內容(例如鼻子),然後做相應的事情。Android - 要降低的像素

我的問題是如何縮放這個以適應可用的屏幕寬度。如果我將圖像(在xml中)設置爲fill_parent,則座標是出來的。這可以通過將觸摸座標轉換爲傾角來補救(如果是這樣,如何),或者我需要獲得屏幕寬度(再次轉換爲傾角)並使用更多數學來理清座標問題?

任何和所有的幫助表示讚賞。

回答

12

pixels = dps * (density/160)

(density/160)因子是被稱爲密度比例因子,並獲得被在Java中從顯示量度對象中檢索。你應該做的是根據dips(與密度爲160的屏幕上的像素相同)存儲鼻子的位置等等,然後根據正在運行的屏幕將dips轉換爲像素:

final static int NOSE_POSITION_DP = 10; 
final float scale = getContext().getResources().getDisplayMetrics().density; 
final int nosePositionPixels = (int) (NOSE_POSITION_DP * scale + 0.5f); 
+0

非常感謝這,這將是非常有益的。 – Rooneyl 2011-04-08 07:41:07

+0

額外的問題:如果鼻子在125,125(基於250px圖像),如果我將圖像設置爲fill_parent並且縮放到屏幕寬度(比如說480px),我將如何設置鼻子位置,例如,125,125現在是左眼了嗎? – Rooneyl 2011-04-08 07:44:34

+0

嘗試使用傾角代替xml,將高度和寬度設置爲250dip的圖像。 – Abhi 2011-04-08 07:46:31

5
public int getDip(int pixel) 
{ 
     float scale = getBaseContext().getResources().getDisplayMetrics().density; 
     return (int) (pixel * scale + 0.5f); 
} 
13

我在圖書館三個有用的功能...

獲取屏幕像素密度

public static float getDensity(Context context){ 
    float scale = context.getResources().getDisplayMetrics().density;  
    return scale; 
} 

轉換探底像素。

public static int convertDiptoPix(int dip){ 
    float scale = getDensity(); 
    return (int) (dip * scale + 0.5f); 
} 

將像素轉換爲驟降。

public static int convertPixtoDip(int pixel){ 
    float scale = getDensity(); 
    return (int)((pixel - 0.5f)/scale); 
} 
+0

如何在靜態函數聲明中使用getApplicationContext()? – 2014-04-28 23:37:11

5

這樣做的一個非常簡單的方法。

int value = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_PX, 250, (mContext).getResources().getDisplayMetrics());