2011-04-08 28 views
5

Mutlak bir düzen öğesinde olan bir yüz görüntüsüne (250px X 250px) sahibim. Şu anda kullanıcının dokunmatik koordinatlarını alıyorum ve biraz matematik kullanarak neyin dokunduğunu hesaplayın (örneğin burun), daha sonra buna göre bir şeyler yapın.Android - piksel için dips

Sorunuz, mevcut ekran genişliğine uyacak şekilde ölçeklendirileceği soru. Görüntüyü (xml'de) fill_parent olarak ayarlarsam, koordinatlar dışarı çıkar. Bu, dokunmatik koordinatları dips'e dönüştürerek düzeltilebilir mi (eğer öyleyse, nasıl), ya da ekran genişliğini (tekrar dipslere dönüştürebilir) ve daha fazla matematik kullanarak koordinat problemini çözmem gerekecek mi?

Her türlü yardım için teşekkür ederiz.

cevap

12

pixels = dps * (density/160)

(density/160) faktör yoğunluğu ölçek faktörü olarak bilinir ve Ölçümleri nesne Display Java alınabilir olsun. Yapmanız gereken şey, burnun konumunu dips (yoğunluğu 160 olan bir ekranda piksellerle aynı olan) cinsinden depolamak ve sonra hangi ekranda çalıştığınıza bağlı olarak dips pikselini piksellere dönüştürmek:

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

Bunun için çok teşekkürler, çok yardımcı olacak. – Rooneyl

+0

ekstra soru: eğer burun 125,125'te (250px görüntüne bağlı olarak), görüntüyü fill_parent olarak ayarlarsam ve ekran genişliğine ölçeklenirse (söz gelimi 480px), burun pozisyonunu dipste nasıl ayarlayacağım? 125,125 şimdi sol göz mü? – Rooneyl

+0

görüntü derinliğini ve genişliğini 250dip olarak ayarlayarak xml olarak yerine kullanmayı deneyin. – Abhi

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

benim kütüphanede üç kullanışlı fonksiyonlara sahip ... Piksel

olsun Ekran Yoğunluğu

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

dönüştürme Dip.

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

Pikselleri Dips'e dönüştürün.

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

Statik bir işlevin bildirimde nasıl getApplicationContext() var? –

5

Bunu yapmanın çok basit bir yolu.

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