2013-02-05 63 views

回答

1

其实,当你调用setContentView()了Android简而言之开始于表面拉丝的意见,你可以观察使用viewTrewwObserve所以你不能得到onCreate()的高度和宽度ImageView作为其目前尚未得出呢。

可以使用,(没试过)

imageView.getViewTreeObserver().addOnGlobalLayoutListener(
new ViewTreeObserver.OnGlobalLayoutListener() { 
    @Override 
    public void onGlobalLayout() { 
    // Get ImageView height width here <------------ 
    } 
}); 

它会注册一个回调被调用时,全球布局状态或视图树的变化中享有知名度。

更新:

或者您可以使用onWindowFocusChanged (boolean hasFocus)

这是此活动是否对用户可见的最佳指标。默认实现会清除密钥跟踪状态,因此应该始终调用。

+0

非常感谢你,它为我工作。 – Sakthimuthiah

0

(1)您也可以使用获得getViewTreeObserver()或(2)您可以在onCreate()

@Override 
protected void onCreate(Bundle savedInstanceState) 
{ 
    //SIMPLY CALL YOUR ASYN TASK WITH DELAY OVER HERE LIKE THIS. 

    new MyImageDrawClass().execute(); 
} 



class MyImageDrawClass extends AsyncTask<Void, Void, Void> 
{ 
    @Override 
    protected Void doInBackground(Void... params) 
    { 
     try 
     { 
      Thread.sleep(100); 
     } 
     catch(InterruptedException e) 
     { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     return null; 
    } 

    @Override 
    protected void onPostExecute(Void result) 
    { 
     LayoutParams lp = mContent.getLayoutParams(); 
     value_wdth = mContent.getWidth(); 
     value_hght = mContent.getHeight(); 

     //PERFORM YOUR OTHER DRAWING STUFF.. 
     super.onPostExecute(result); 
    } 

} 

添加一个异步任务让你发现问题这个我知道,你也可以减少时间延迟到Thread.sleep(10); 我通常使用这种方法来获得高度和获得宽度。

+0

这是一个完整的黑客。 Thread.sleep()通常被用于很多情况,通常用于糟糕的事情。这是一件坏事。人为地延迟布局及时完成的​​“希望”。 Yeuch。 – Simon

+0

你的权利,但我已经提到'“1)你可以使用getViewTreeObserver()来获得它,如果他希望这样做,这只是另一个解决方案,黑客似乎工作得很好我。 – Anuj

相关问题