2012-04-29 3 views
1

롤오버 이전 이미지 이후에 3 초 이내에 다른 이미지를 ImageView에 표시하려고합니다. 코드 :ImageClock.sleep() 전에 ImageView를 업데이트 할 수없는 이유

OnClickListener oc = new OnClickListener() { 
@Override 
public void onClick(View v) { 
     ImageView iv = (ImageView)v; 
     iv.setImageResource(img2_id); 
     SystemClock.sleep(3000); 
     iv.setImageResource(img1_id); 
    } 
    } 

    myImageView.setOnClickListener(oc); 

하지만 작동하지 않습니까? 그래서 내가 잘못하고있는거야?

답변

3

UI 스레드를 차단하고 있습니다. 따라서 절전 명령을 실행하는 동안 화면이 새로 고쳐지지 않습니다. 필요한 것은 이미지 리소스를 변경하는 함수에 대해 비 차단 지연 호출을 예약하는 것입니다. 그런 일을 할 수있는 수정 된 코드는 다음과 같습니다.

Handler mHandler = new Handler(); /*handler declared in your Activity thread, I assume*/ 

OnClickListener oc = new OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     ImageView iv = (ImageView)v; 
     iv.setImageResource(img2_id); 

     mHandler.postDelayed(new Runnable(){ 
      public void Run(){ 
       iv.setImageResource(img1_id); 
      } 
     },3000); 

    } 
} 
myImageView.setOnClickListener(oc); 
+0

고마워요! – giangdn

관련 문제