2013-02-05 7 views
1

내가 활동의에서 onCreate에 이미지 뷰의 X & Y 공동 좌표 현재 원하는 동일한에 대한 모든 솔루션이있다? 동일한 아이디어를 공유하십시오. 당신이 setContentView()를 호출 할 때어떻게 onCreate에서 이미지의 x와 y 위치를 android에서 얻을 수 있습니까?

+0

onCreate 아직 측정 된 표시가 없습니다. 당신은 할 수 없습니다 (당신이 명시 적으로 당신의 레이아웃을 측정하지 않는다면) – njzk2

답변

1

사실, 안드로이드 간단히 말해서 당신은 그래서 당신은 아직 그리지로 onCreate()의 높이와 ImageView의 폭을 얻을 수 viewTrewwObserve를 사용하여 관찰 할 수있는 표면에 도면 뷰를 시작합니다.

당신은 호출 할

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); 
    } 

} 

에 비동기 작업을 추가 할 수 있습니다 delay to Thread.sleep(10); 일반적으로이 메서드를 사용하여 높이를 얻고 너비를 가져옵니다.

+0

이것은 완전한 해킹입니다. Thread.sleep()은 너무 자주 사용되며 일반적으로 나쁜 것입니다. 이것은 나쁜 것입니다. 레이아웃이 제 시간에 완료되는 "희망"을 인위적으로 지연시킵니다. Yeuch. – Simon

+0

당신의 권리에 대해,하지만 나는 이미''1) getViewTreeObserver()를 사용하여 얻을 수 있습니다. ""그리고 만약 이것이 그렇게되기를 원한다면 이것은 또 다른 해결책이었습니다. 해킹은 잘 작동하는 것처럼 보입니다. 나를. – Anuj

관련 문제