2013-05-06 7 views
5

मेरे पास ListView के सेल के लिए उपयोग किया जाने वाला एक सरल रैखिक लेआउट है, और इसमें एक छविदृश्य है। छवि इंटरनेट से डाउनलोड की जाएगी, इसलिए आकार अलग-अलग आकार हो सकते हैं।छवि दृश्य दृश्य गतिशीलता को कैसे बदलें

हालांकि, मैं imageview की चौड़ाई fill_parent होने के लिए सेट करना चाहता हूं, जो तय है, और रनटाइम पर छवि ऊंचाई को गतिशील रूप से बदलना चाहता है। छवि ऊंचाई सेट करने के नियम: यदि छवि का एच/डब्ल्यू अनुपात 1 से अधिक है, तो ImageView वर्ग बनाएं, मतलब चौड़ाई तक ऊंचाई से मेल खाता है।

यदि छवि का एच/डब्ल्यू अनुपात 1 से कम है, तो इसे आनुपातिक रूप से आकार दें। नीचे के रूप में दो नमूने अपेक्षित।

पहला वाला एच/डब्ल्यू < 1 है, जबकि दूसरा 'बिल्ली' एच/डब्ल्यू> 1 है।

enter image description here enter image description here आपके समय के लिए धन्यवाद।

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:background="@color/white" 
    android:orientation="vertical" 
    android:padding="10dp" > 

     <TextView 
     android:id="@+id/postTitle" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:ellipsize="end" 
     android:maxLines="2" 
     android:textColor="@color/black" 
     android:textSize="18sp" 
     android:textStyle="bold" /> 

     <ImageView 
     android:id="@+id/postImg" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_marginTop="10dp" 
     android:scaleType="centerCrop" 
     android:src="@drawable/dummy_image" 
     android:contentDescription="@string/postImage" /> 
    </LinearLayout> 

उत्तर

7

आप imageView

अवहेलना onMeasure उपवर्ग करने की आवश्यकता होगी, मैं इस परीक्षण किया है नहीं, लेकिन सभी के लिए आवश्यक चरों देखते हैं और विचार सही है। आप बस छवि के पहलू अनुपात को छविदृश्य ऊंचाई पर लागू करते हैं, और यदि यह चौड़ाई से अधिक है, तो इसे चौड़ाई पर सेट करें।

@Override 
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) 
{ 
    Drawable drawable = getDrawable(); 
    if (drawable != null) 
    { 
     //get imageview width 
     int width = MeasureSpec.getSize(widthMeasureSpec); 


     int diw = drawable.getIntrinsicWidth(); 
     int dih = drawable.getIntrinsicHeight(); 
     float ratio = (float)diw/dih; //get image aspect ratio 

     int height = width * ratio; 

     //don't let height exceed width 
     if (height > width){ 
      height = width; 
     } 


     setMeasuredDimension(width, height);  
    } 
    else 
     super.onMeasure(widthMeasureSpec, heightMeasureSpec); 

} 
+0

क्या यह आपके लिए काम करता है? –

+0

नहीं, काम नहीं। धन्यवाद वैसे भी –

+0

क्या होता है, क्योंकि वे सेटिंग्स छवि को स्केल करेंगे जैसे चौड़ाई स्थिर है और ऊंचाई छवि के पहलू अनुपात के संबंध में खींची जाती है। –

0

जगह है जहाँ आप यूआरएल से कोड में imageView लोड कर रहे हैं, तो आप वहाँ पर imageView के लेआउट पैरामीटर सेट करने के लिए है। यह गतिशील रूप से छवि के आयामों को बदल देगा।

छवि लोड करने के बाद आयाम ढूंढें और अनुपात की गणना करें और उस स्थिति के अनुसार आयामों को बदलें जिसे आप लागू करना चाहते हैं।

LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(width,height); 
    imageView.setLayoutParams(layoutParams); 
    //set other properties of the imageview according to your condition 
+0

मेरे पास छवि का आकार है। तो समस्या, मैं कैसे जान सकता हूं कि ImageView के लिए किस ऊंचाई को सेट करना है? मैंने इसे displaymetrics.widthPixels minus मार्जिन के माध्यम से किया है जिसे मैंने एक्सएमएल लेआउट में सेट किया है (डीपी से पीएक्स रूपांतरित)। क्या यह सबसे अच्छा तरीका है? धन्यवाद –

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