क्या सेटविद (इंट पिक्सल) डिवाइस स्वतंत्र पिक्सेल या भौतिक पिक्सेल का उपयोग इकाई के रूप में करता है? उदाहरण के लिए, सेटविथ (100) किसी दृश्य की चौड़ाई को 100 डिप्स या 100 पीएक्स पर सेट करता है?
धन्यवाद।
क्या सेटविद (इंट पिक्सल) डिवाइस स्वतंत्र पिक्सेल या भौतिक पिक्सेल का उपयोग इकाई के रूप में करता है? उदाहरण के लिए, सेटविथ (100) किसी दृश्य की चौड़ाई को 100 डिप्स या 100 पीएक्स पर सेट करता है?
धन्यवाद।
जवाबों:
यह पिक्सेल का उपयोग करता है, लेकिन मुझे यकीन है कि आप सोच रहे हैं कि इसके बजाय डिप्स का उपयोग कैसे किया जाए। उत्तर में है TypedValue.applyDimension()
। कोड में dips को px में कैसे परिवर्तित करें, इसका एक उदाहरण यहां दिया गया है:
// Converts 14 dip into its equivalent px
Resources r = getResources();
int px = Math.round(TypedValue.applyDimension(
TypedValue.COMPLEX_UNIT_DIP, 14,r.getDisplayMetrics()));
कोड में DIP की निरंतर संख्या प्राप्त करने का सही तरीका एक संसाधन XML फ़ाइल है, जिसमें dp मानों की तरह थोड़ा सा है:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<dimen name="image_width">100dp</dimen>
<dimen name="image_height">75dp</dimen>
</resources>
फिर अपने कोड में संसाधन का उल्लेख करें जैसे:
float width = getResources().getDimension(R.dimen.image_width));
float height = getResources().getDimension(R.dimen.image_height));
आपके द्वारा लौटाया गया फ्लोट डिवाइस के पिक्सेल घनत्व के अनुसार बढ़ाया जाएगा और इसलिए आपको अपने आवेदन में रूपांतरण विधि की प्रतिकृति रखने की आवश्यकता नहीं है।
Method setWidth (100), 100 px को चौड़ाई के रूप में सेट करें (dp में नहीं)। यदि आप अलग-अलग Android फोन पर चौड़ाई अलग-अलग समस्याओं का सामना कर सकते हैं। तो पिक्सल के बजाय dp में माप का उपयोग करें। नमूना चौड़ाई के dp में माप प्राप्त करने के लिए नीचे दिए गए कोड का उपयोग करें। = 300px और ऊंचाई = 400px।
int width = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 300, getResources().getDisplayMetrics());
int Height = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 400, getResources().getDisplayMetrics());
float dps = 100;
float pxs = dps * getResources().getDisplayMetrics().density;
पिक्सेल निश्चित रूप से, विधि पैरामीटर के रूप में पिक्सल के लिए पूछ रहा है।
उपरोक्त उत्तरों के आधार पर जो मेरे लिए ठीक है, मैं कुछ सहायक विधियाँ उत्पन्न करता हूँ , बस उन्हें पूरे प्रोजेक्ट में उपयोग करने के लिए अपने बर्तनों में जोड़ें।
// value in DP
public static int getValueInDP(Context context, int value){
return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, value, context.getResources().getDisplayMetrics());
}
public static float getValueInDP(Context context, float value){
return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, value, context.getResources().getDisplayMetrics());
}
// value in PX
public static int getValueInPixel(Context context, int value){
return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_PX, value, context.getResources().getDisplayMetrics());
}
public static float getValueInPixel(Context context, float value){
return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_PX, value, context.getResources().getDisplayMetrics());
}