2013-08-16 10 views
18

लौटने पर मैंने इसी तरह के प्रश्नों को देखा है और उनके समाधानों का प्रयास किया है, लेकिन यह मेरे लिए काम नहीं करता है। मैं एक imageView की चौड़ाई लेने की कोशिश की, लेकिन यह 0. रिटर्न यहाँ कोड है:देखें getWidth() और getHeight() 0

public class MainActivity extends Activity { 
private ImageView image1; 
float centerX,centerY; 
private ImageView image2; 
private boolean isFirstImage = true; 

@Override 
public void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.rotate); 
    image1 = (ImageView) findViewById(R.id.ImageView01); 
    image2 = (ImageView) findViewById(R.id.ImageView02); 
    image2.setVisibility(View.GONE); 

    if (isFirstImage) { 
     applyRotation(0, 90); 
     isFirstImage = !isFirstImage; 
    } 
} 

private void applyRotation(float start, float end) { 


      centerX=image1.getWidth()/2.0f; 
    centerY=image1.getHeight()/2.0f; 
    final Flip3dAnimation rotation = 

    new Flip3dAnimation(start, end,centerX , centerY); 
    rotation.setDuration(500); 
    rotation.setFillAfter(true); 
    rotation.setInterpolator(new AccelerateInterpolator()); 
    rotation.setAnimationListener(new DisplayNextView(isFirstImage, image1, 
      image2)); 

    if (isFirstImage) 
    { 
     image1.startAnimation(rotation); 
    } else { 
     image2.startAnimation(rotation); 
    } 
} 
} 

किसी को भी इस के साथ मेरी मदद कर सकते हैं? धन्यवाद

+5

इस विषय को कवर करने वाले SO पर पर्याप्त प्रश्न/उत्तर से अधिक हैं।संक्षेप में जब आप अभी तक माप नहीं पाए जाते हैं तो आप चौड़ाई और ऊंचाई तक पहुंच रहे हैं। – Tobrun

उत्तर

17

आपको onSizechanged() विधि का उपयोग करने की आवश्यकता है।

यह लेआउट के दौरान कहा जाता है जब इस दृश्य के आकार

+0

लेकिन वह 'onSchangchanged()' विधि का उपयोग कैसे करता है। यह विधि संरक्षित विधि है और वह केवल इस विधि को ओवर्राइड कर सकता है अगर वह अपना स्वयं का लेआउट व्यू –

+0

से बढ़ाता है तो यह सच है। मैंने इस तरह उत्तर क्यों दिया, मुझे याद नहीं है, लेकिन अगर 'छवि' दृश्य की 'चौड़ाई' और 'ऊंचाई' तक पहुंचने के लिए 'फ्रैगमेंट' की' गतिविधि 'से पहुंचना है तो इसे कहीं भी लाइफसील में किया जाना चाहिए जैसे' ऑनस्टार्ट () 'हालांकि मुझे एक स्पष्ट बयान नहीं मिला जहां 'ऊंचाई' और' चौड़ाई 'शून्य हो गई। – Kerry

9

आप या तो छवि दृश्यों की चौड़ाई और ऊंचाई को मापने से पहले या आपके द्वारा दृश्यता को सेट करने के बाद सेट कर रहे हैं।

image2.setVisibility(View.GONE); 

फिर getWidth() या getHeight() वापस आ जाएगी 0.,

तुम भी onWindowFocusChanged(), onSizeChanged() और onMeasure() पर एक नजर है कर सकते हैं:

@Override 
public void onWindowFocusChanged(boolean focus) { 
    super.onWindowFocusChanged(focus); 
    // get the imageviews width and height here 
} 
4
public class GETImageView extends ImageView { 

public GETImageView (Context context, AttributeSet attrs) { 
    super(context, attrs); 
} 

@Override 
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
    Drawable d = getDrawable(); 

    if (d != null) { 
     int width = MeasureSpec.getSize(widthMeasureSpec); 
    } 
    super.onMeasure(widthMeasureSpec, heightMeasureSpec); 
} 
} 

ImageView ने अभी तक छवि खींची नहीं है, इसलिए कोई चौड़ाई या ऊंचाई वापसी नहीं है। आप छवि दृश्य चौड़ाई प्राप्त करने के लिए उप-वर्ग का उपयोग कर सकते हैं।

यहाँ कुछ लिंक उपलब्ध कराने एक और आसान तरीकों है:

How to get the width and height of an android.widget.ImageView?

How to get the width and height of an Image View in android?

Android ImageView return getWidth, getHeight zero

आशा इस मदद आप।

+1

मुझे नहीं पता कि आपको धन्यवाद कैसे दिया जाए। आपके उपरोक्त कोड का हिस्सा मुझे बहुत मदद करता है। 'int चौड़ाई = MeasureSpec.getSize (widthMeasureSpec);'। मैंने लगभग 2 दिन बिताए और मेरे काम को पूरा करने के लिए सभी क्रमपरिवर्तनों और संयोजनों की कोशिश की, लेकिन इस लाइन ने मुझे समाधान को समझने में मदद की। :) – Srikanth

+0

हम सिर्फ समय बचाने के लिए एक-दूसरे की मदद कर रहे हैं ~ कभी भी ध्यान न दें ~ –

3

आप imageView Image1 के लिए OnGlobalLayoutListener उपयोग कर सकते हैं ताकि आप के रूप में

image1 = (ImageView) findViewById(R.id.ImageView01); 
     ViewTreeObserver viewTreeObserver = image1.getViewTreeObserver(); 
     viewTreeObserver 
       .addOnGlobalLayoutListener(new OnGlobalLayoutListener() { 
        @Override 
        public void onGlobalLayout() { 
         if (isFirstImage) { 
          applyRotation(0, 90); 
          isFirstImage = !isFirstImage; 
         } 
         if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN) 
          image1.getViewTreeObserver() 
            .removeOnGlobalLayoutListener(this); 
         else 
          image1.getViewTreeObserver() 
            .removeGlobalOnLayoutListener(this); 
        } 
       }); 
+0

यह तब नहीं है जब दृश्यता समाप्त हो गई हो। मेरा मतलब है, आप उस मामले में चौड़ाई या ऊंचाई नहीं प्राप्त कर सकते हैं। – Sotti

-7

सटीक चौड़ाई और ऊंचाई को देखने के कब्जे में लेआउट ... में मिलता है कृपया एक का उपयोग कर सकते हैं हैंडलर और देरी समय के साथ इस पर ऊंचाई और चौड़ाई मिल> = 10

इस प्रयोग के लिए उपयोगी हो सकता है:

012,
@Override 
    protected void onResume() { 
     // TODO Auto-generated method stub 
     super.onResume(); 
     getHeight(); 

    } 

    private void getHeight() { 
     // TODO Auto-generated method stub 
     new Handler().postDelayed(new Runnable() { 
      @Override 
      public void run() { 
       Toast.makeText(getApplicationContext(), "Height:" + mAnimationView.getMeasuredHeight(), 
         Toast.LENGTH_SHORT).show(); 
      } 
     }, 10L); 

    } 
+5

यह वास्तव में ऐसा करने का अच्छा विचार नहीं है। आपको कोई गारंटी नहीं है कि '10' की मनमाने ढंग से देरी होने के लिए लेआउट के लिए काफी समय लग रहा है। लेआउट_विड्थ = "match_parent" का उपयोग करते समय – jwir3

8

आप उपयोग करना चाहिए: image1.getLayoutParams().width;

+5

विफल ... लौटने -1 ... –

0

शायद तुम View.measure (int, int) पहले फोन करना चाहिए।
चूंकि चौड़ाई और ऊंचाई परिभाषित नहीं की जाती है जब तक कि यह दृश्य आकर्षित न हो जाए। आप इस आकार को इसकी गणना करने के लिए इस दृश्य को लागू करने के लिए हाथ से माप सकते हैं;

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