2011-01-25 13 views
7

इसलिए मुझे स्क्रीन के क्षेत्र के आधार पर एक छवि का आकार बदलने की जरूरत है। छवि को स्क्रीन ऊंचाई का आधा होना चाहिए, अन्यथा यह कुछ पाठ ओवरलैप करता है।एंड्रॉइड स्क्रीन आकार के आधार पर छवि आकार बदल रहा है?

तो ऊंचाई = 1/2 स्क्रीन ऊंचाई। चौड़ाई = ऊंचाई * पहलू अनुपात

मैं कुछ है कि था पाया (बस पहलू अनुपात एक ही रखने की कोशिश कर):

Display myDisplay = ((WindowManager) getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay(); 
int width =myDisplay.getWidth(); 
int height=myDisplay.getHeight(); 

लेकिन यह कैसे मैं जावा में छवि ऊँचाई परिवर्तित करेंगे? या यदि संभव हो तो एक्सएमएल भी? मुझे एक कामकाजी उत्तर नहीं मिल रहा है।

उत्तर

17

आप कोड में LayoutParams के साथ ऐसा कर सकते हैं। दुर्भाग्यवश एक्सएमएल के माध्यम से प्रतिशत निर्दिष्ट करने का कोई तरीका नहीं है (सीधे नहीं, आप वजन के साथ गड़बड़ कर सकते हैं, लेकिन यह हमेशा मदद नहीं करेगा, और यह आपके पहलू अनुपात को नहीं रखेगा), लेकिन यह आपके लिए काम करना चाहिए:

//assuming your layout is in a LinearLayout as its root 
LinearLayout layout = (LinearLayout)findViewById(R.id.rootlayout); 

ImageView image = new ImageView(this); 
image.setImageResource(R.drawable.image); 

int newHeight = getWindowManager().getDefaultDisplay().getHeight()/2; 
int orgWidth = image.getDrawable().getIntrinsicWidth(); 
int orgHeight = image.getDrawable().getIntrinsicHeight(); 

//double check my math, this should be right, though 
int newWidth = Math.floor((orgWidth * newHeight)/orgHeight); 

//Use RelativeLayout.LayoutParams if your parent is a RelativeLayout 
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
    newWidth, newHeight); 
image.setLayoutParams(params); 
image.setScaleType(ImageView.ScaleType.CENTER_CROP); 
layout.addView(image); 

शायद अधिक जटिल हो सकता है, शायद एक आसान तरीका है? हालांकि, मैं पहले कोशिश करता हूं, हालांकि।

+0

ऐसा लगता है कि अगर मैं इसे चलाने का प्रयास करता हूं तो मुझे फोर्स बंद हो रहा है। अगर यह लॉगकैट के तहत बिल्कुल मदद करता है, तो मुझे "असहज हैंडलर: थ्रेड मुख्य बहिष्करण के बिना अपरिचित अपवाद के कारण" मिल रहा है। मुझे बिल्कुल यकीन नहीं है कि इसका क्या अर्थ है। Ps.मैं अभी भी एंड्रॉइड के लिए नया हूं – QQWW1

+1

ठीक है, यह एक सामान्यीकृत उदाहरण है, आपकी स्थिति पाठ्यक्रम के भिन्न होने जा रही है (परिवर्तनीय नाम, एक्सएमएल आईडी, आदि)। लॉगकैट के तहत, इसमें किस अपवाद का पता लगाना चाहिए, और फ़ाइल की किस पंक्ति में। – kcoppock

+0

अहह ... मैं देखता हूं कि मैंने क्या गलत किया है, मैंने अपने ImageView के लिए "R.id.rootlayout" को प्रतिस्थापित किया है, न कि मेरे रिलेवेटिवआउट .. धन्यवाद !!!! – QQWW1

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