2012-07-30 8 views
14

मैं Canvas का उपयोग कर एक दृश्य पर एक विशिष्ट ऊंचाई (पिक्सेल में) के साथ पाठ खींचना चाहता हूं। क्या आप बस Paint.setTextSize(float) का उपयोग पिक्सेल की संख्या के साथ कर सकते हैं या यह dp या sp का उपयोग कर रहा है?माप की कौन सी इकाई पेंट.सेटटेक्स्टसाइज (फ्लोट) का उपयोग करती है?

उत्तर

14

यह पिक्सल का उपयोग करता है, लेकिन आप इस कोड का उपयोग डीपी को परिवर्तित कर सकते हैं:

double getDPFromPixels(double pixels) { 
    DisplayMetrics metrics = new DisplayMetrics(); 
    getWindowManager().getDefaultDisplay().getMetrics(metrics); 
    switch(metrics.densityDpi){ 
    case DisplayMetrics.DENSITY_LOW: 
       pixels = pixels * 0.75; 
       break; 
    case DisplayMetrics.DENSITY_MEDIUM: 
       //pixels = pixels * 1; 
       break; 
    case DisplayMetrics.DENSITY_HIGH: 
       pixels = pixels * 1.5; 
       break; 
    } 
    return pixels; 
} 
+0

कि तेजी से जवाब देने के लिए धन्यवाद। – marzipankaiser

+0

@ टोड डेविस - मैं कस्टम व्यू क्लास के अंदर इसका उपयोग कैसे करूं? getWindowManager() – Neil

+1

@Neil उपयोग नहीं कर सकते - आप() '' Context' प्राप्त करने के लिए देखें की विधि 'getContext उपयोग कर सकते हैं, उसके बाद आप' Context.getSystemService (Context.WINDOW_SERVICE) '' प्राप्त करने के लिए WindowManager' कॉल कर सकते हैं। इस पर और अधिक http://developer.android.com/reference/android/view/WindowManager.html। – Tzoiker

1

इन तरीकों में शामिल हैं DisplayMetrics कि भविष्य एंड्रॉयड एसडीके में जोड़ा जा सकता है।

पिक्सल डुबकी के लिए:

public static float getDipFromPixels(float px) { 
     return TypedValue.applyDimension(
       TypedValue.COMPLEX_UNIT_PX, 
       px, 
       Resources.getSystem().getDisplayMetrics() 
     ); 
} 

पिक्सल डुबकी:

public static float getPixelsFromDip(float dip) { 
     return TypedValue.applyDimension(
       TypedValue.COMPLEX_UNIT_DIP, 
       dip, 
       Resources.getSystem().getDisplayMetrics() 
     ); 
} 
8

इस तरह के तरीकों के लिए एक पिक्सल मूल्य प्राप्त करने के लिए सबसे आसान तरीका बस उपयुक्त डीपी या dimens में एसपी मान निर्धारित करने के लिए है .xml फ़ाइल और इसे इस तरह पुनः प्राप्त:

int sizeInPx = context.getResources().getDimensionPixelSize(R.dimen.sizeInSp); 

आप वास्तव में 3 के आधार पर उपयोग करने के लिए उपलब्ध तरीकों है आपकी ज़रूरतें:

  • getDimension() पिक्सल में एक फ्लोट देता है।

  • getDimensionPixelSize() पिक्सल में एक पूर्णांक देता है। यह getDimension() के समान है, लौटाए गए मान को छोड़कर निकटतम पूर्णांक मान को ROUNDED किया जाता है और यह सुनिश्चित करता है कि गैर-शून्य इनपुट मान नॉन शून्य आउटपुट मान में परिणाम (उदाहरण 0.1 को 1 के रूप में वापस किया गया है, 0 नहीं)।

  • getDimensionPixelOffset() पिक्सल में एक पूर्णांक देता है। यह getDimension() के समान है, लौटाए गए मान को छोड़कर TRUNCATED (यानी गोलाकार) है। परिणाम शून्य हो सकता है।

+1

पर फ़्लोट होना चाहिए यह सबसे अच्छा जवाब है; यह सभी मौजूदा उपकरणों पर सही ढंग से काम करता है और भविष्य के उपकरणों पर काम करना जारी रखेगा (टोड डेविस के जवाब में नई घनत्व जैसे xhdpi, xxhdpi और अन्य को याद आ रही है)। यह भी अधिक लचीला है आप विभिन्न स्क्रीन आकारों (टैबलेट, आदि) के लिए वैकल्पिक dimens.xml फ़ाइल प्रदान कर सकते हैं या आवश्यकतानुसार डीपी और एसपी के बीच बदल सकते हैं। – NaxyMatt

+1

हां, यह दैट का जवाब सबसे अच्छा जवाब है क्योंकि वंडरिंगलिंगुइस्ट कहते हैं, क्योंकि टोड डेविस के समाधान को xHigh, xxhigh और xxxhigh और टीवी मामलों में शामिल करने के लिए अद्यतन किया जाना चाहिए, जो भविष्य में आने वाले मामलों को बताते हैं कि यह जटिल है और इसके बजाय आसानी से टूटा जाएगा आईआईटी के जवाब का जो अब और भविष्य में काम करेगा, भले ही डिवाइस कभी भी आएंगे और एंड्रॉइड के रूप में समाधान काम करता है, सभी राजा डिवाइस घनत्व को संभालने की योजना है। –

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