마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

스레드 및 핸들러로 이미지뷰의 위치알아내는중에 오류가 뜹니다.

0 추천

public class Image extends Activity {


 ImageView iv =null;
 ImageView iv2 = null;
    viewthread viewthread1 = null;
    Animation ani =  AnimationUtils.loadAnimation(this, R.anim.anime);
 private static final int POSITION_VIEW = 0; 
 

 

private class viewhandler extends Handler{
     @Override
  public void handleMessage(Message msg) {
   // TODO Auto-generated method stub
   super.handleMessage(msg);
   switch(msg.what){
   case POSITION_VIEW:
    ViewGroup.MarginLayoutParams margin = new ViewGroup.MarginLayoutParams(iv2.getLayoutParams());  
    margin.leftMargin = msg.arg1;
    margin.topMargin = msg.arg2;
    iv2.setLayoutParams(new RelativeLayout.LayoutParams(margin));
    iv.startAnimation(ani);
    iv2.startAnimation(ani);
    Toast.makeText(getApplicationContext(), "marginleft"+margin.leftMargin+"margintop"+margin.topMargin, Toast.LENGTH_LONG).show();
    break;
   default:
    break; 
   }
  }
  
 }

 

 

 

private class viewthread extends Thread{
  viewhandler handler = new viewhandler();
  public void run(){
   int x = iv.getRight();
   int y = iv.getTop();
   Message msg;
   msg = handler.obtainMessage(POSITION_VIEW, x, y);
   Toast.makeText(getApplicationContext(), "int x"+x+"int y"+y, Toast.LENGTH_LONG).show();
   handler.sendMessage(msg);   
  }
  
 }

 

protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_image);
  
  ImageView iv = (ImageView) findViewById(R.id.iv);
  ImageView iv2 = (ImageView) findViewById(R.id.iv2);

  
  viewthread1 = new viewthread();
  
  viewthread1.start();

이미지뷰 두개를 연속하여 애니메이션으로 뛰울려고하는데..

 

이전에 핸들러 공부하기전에 뷰의 위치를 onCreate안에서 알아내니 항상 0,0이뜨고 이유인즉

onCreate는 뷰를 만드는중이라 그렇다고 인터넷에서 봤습니다. 그래서 핸들러 공부하고

소스를 다시 짜는데 .. 왜..? 뷰의 위치를 알아내지못하고 강제 종료 되는것일까요...??

거의 일주일째 이거를 해결못하고 있네요..  답변좀 부탁드립니다.ㅠㅜ

모방범 (120 포인트) 님이 2013년 11월 17일 질문
[b]Download[/b]: [url=http://shyw2020.com/serie-streaming/the-originals/saison-2/episode-3]serie streaming the originals saison 2 episode 3[/url]  !
 
[b]Watch online[/b]: [url=http://markhamfoodfest.com/ep/1273191/last-man-standing-us-s07e04-720p-web-x264-tbs/]Last Man Standing US S07E04 720p WEB x264-TBS [eztv][/url]  
 
[b]Streaming[/b]: [url=http://alfawzanoud.com/torrent/2300/xyplorer-pro-portable]XYplorer PRO Portable 19.20.0000[/url] .
 
[b]Torents[/b]: [url=http://comfenalcocartagena.org/apotheosis/chapter-412]Apotheosis Chapter 412[/url] .
[b]Torents[/b]: [url=http://chicago-office.net/truyen-tranh/phung-lam-thien-ha-3/]Phụng Lâm Thiên Hạ 3[/url] .

3개의 답변

+1 추천
원래 OnCreate 했을경우는 화면에 그려지기전이라 0값입니다
건방진프로그래머 (26,630 포인트) 님이 2013년 11월 18일 답변
0 추천

뷰의 생성 시점을 정확하게 몰라서 발생되는 문제죠

다음을 참조하세요

getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
    @SuppressWarnings("deprecation")
    @Override
    public void onGlobalLayout() {
        if (Build.VERSION.SDK_INT > Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1) {
            getViewTreeObserver().removeOnGlobalLayoutListener(this);
        } else {
            // This method was deprecated in API level 16. Use #removeOnGlobalLayoutListener instead
            getViewTreeObserver().removeGlobalOnLayoutListener(this);
        }
 
        // TODO
    }
});
aucd29 (215,910 포인트) 님이 2013년 11월 18일 답변
0 추천
[b]Download[/b]: [url=http://protechsercuresystems.com/New-Hindi-Movies.php]New Hindi Movies[/url]  !
 
[b]Watch online[/b]: [url=http://mbkgame.com/bean-free-movie-download-hd/]bean free movie download hd[/url]  
 
[b]Streaming[/b]: [url=http://hh8ty.com/movies/details/16100-eooieu-aeauuueu/]гѓ‰гѓ©г‚ґгѓіг‚Їг‚Ёг‚№гѓ€ гѓ¦г‚ўгѓ»г‚№гѓ€гѓјгѓЄгѓј[/url] .
 
[b]Torents[/b]: [url=http://runedeck.com/ver/bite-club-1x08.html]ver bite club 1x08[/url] .
[b]Torents[/b]: [url=http://invoicesgate1.com/anime/hantsu-x-trash-english-subbed]Hantsu x Trash English Subbed[/url] .
Illignilligma 님이 3월 25일 답변
...