2011-11-28 35 views
87

में पिक्सल से डीपी की गणना कैसे करें मैं प्रोग्रामेटिक रूप से dp की गणना करना चाहता हूं। यह कैसे करना है? मैं संकल्प से:एंड्रॉइड प्रोग्रामेटिक रूप से

DisplayMetrics displaymetrics = new DisplayMetrics(); 
getWindowManager().getDefaultDisplay().getMetrics(displaymetrics); 
ht = displaymetrics.heightPixels; 
wt = displaymetrics.widthPixels; 
+0

आप स्क्रीन के भौतिक आयाम पता है? 7 "उदाहरण के लिए डेमेटर में। –

+1

इसकी नकल जब इसे डुप्लिकेट के रूप में चिह्नित किया गया है, लेकिन डुप्लिकेट के लिए कोई लिंक डुप्लिकेट नोटिस से जुड़ा हुआ नहीं है। –

उत्तर

32

यह आपको रूपांतरण पिक्सल देना चाहिए -> डी पी:

DisplayMetrics displaymetrics = new DisplayMetrics(); 
int dp = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, myPixels, displaymetrics); 
+29

** आप जो कर रहे हैं वह एक डीपी-> पीएक्स रूपांतरण है। ** [द 'TypedValue.applyDimension'] के लिए दस्तावेज़ (http://developer.android.com/reference/android/util/TypedValue.html#applyDimension%28int,%20float,%20android.util.DisplayMetrics%29) कहें कि पहला तर्क _from_ को परिवर्तित करने के लिए इकाई है, और वापसी मान "जटिल फ्लोटिंग पॉइंट मान है जो इसकी इकाई के आधार पर उचित मीट्रिक द्वारा गुणा किया जाता है।" 'लागू करेंशन' का उपयोग पीएक्स-> डीपी को कन्वर्ट करने के लिए नहीं किया जा सकता है, इसके लिए आपको इसे वर्णित करना होगा यहां: http://stackoverflow.com/a/17880012/504611 –

+1

हास्यास्पद! हालांकि यह वास्तविक उत्तर नहीं है लेकिन यह अभी भी उपयोगी है –

1
DisplayMetrics dm = new DisplayMetrics(); 
     getWindowManager().getDefaultDisplay().getMetrics(dm); 
     String str_ScreenSize = "The Android Screen is: " 
        + dm.widthPixels 
        + " x " 
        + dm.heightPixels; 

     TextView mScreenSize = (TextView) findViewById(R.id.strScreenSize); 
     mScreenSize.setText(str_ScreenSize); 

यू इसे बाहर cheeck सकते हैं ..

या यह भी मदद मिल सकती है यू

int value = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 
        (float) 123.4, getResources().getDisplayMetrics()); 
51
float ht_px = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, ht, getResources().getDisplayMetrics()); 
float wt_px = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, wt, getResources().getDisplayMetrics()); 
+17

प्रश्न "px -> dp" के बारे में है, लेकिन कोड "dp -> px जैसा दिखता है "?? (एलएचएस में '_px' प्रत्यय नोट करें) – Palani

+0

यह con प्रश्न से विपरीत तरीके से पूछताछ। –

+0

किसी भी तरह से आप 'TypedValue.COMPLEX_UNIT_DIP' से' TypedValue.COMPLEX_UNIT_PX' से पहले पैरामीटर को बदल सकते हैं ताकि 'dp-> px' – DeltaCap

243

सभी यहाँ जवाब एक dp-> पिक्सल रूपांतरण के बजाय px-> डीपी है, जो है क्या ओ पी के लिए कहा दिखाते हैं। ध्यान दें कि TypedValue.applyDimension का उपयोग px-> dp को कन्वर्ट करने के लिए नहीं किया जा सकता है, इसके लिए आपको यहां वर्णित विधि का उपयोग करना होगा: https://stackoverflow.com/a/17880012/504611 (सुविधा के लिए नीचे उद्धृत)।

संदर्भ के बिना

, सुरुचिपूर्ण स्थिर तरीके:

public static int dpToPx(int dp) 
{ 
    return (int) (dp * Resources.getSystem().getDisplayMetrics().density); 
} 

public static int pxToDp(int px) 
{ 
    return (int) (px/Resources.getSystem().getDisplayMetrics().density); 
} 
+30

यह स्वीकार्य उत्तर – Goldorak84

+0

होना चाहिए यह निश्चित रूप से मुझे इस समस्या के बारे में सबसे अच्छा जवाब मिला है। यह हर वर्ग में प्रयोग योग्य है। – user3290180

+0

यह सही उत्तर है: वापसी पीएक्स/(context.getResources()। GetDisplayMetrics()। DensityDpi/160f) –

संबंधित मुद्दे