2014-05-11 2 views
0

지연 시간이 3 초인 내 앱에서 두 개의 이미지를 전환하고 싶습니다. 이것은 이전 코드입니다.지연이있는 이미지 전환

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    if (savedInstanceState == null) { 
     getFragmentManager().beginTransaction() 
       .add(R.id.container, new PlaceholderFragment()) 
       .commit(); 
    } 

    Handler handler = new Handler(); 
    handler.postDelayed(new Runnable() { 

     @Override 
     public void run() { 
      ImageView image = (ImageView)  
findViewById(R.id.imgView_dice0); 
      image.setImageResource(R.drawable.dice_6);  
     } 
    }, 3000); 
} 
.... 

이미지를 한 번 전환하는 데 사용됩니다. 루프로 둘러싸인 지연으로 호출되는 두 가지 방법 (그리고 을 R.drawable.dice_1으로 대체)으로 이미지 변경을 시도했습니다. 그건 작동하지 않는다, 애플 리케이션은 항상 하나의 동일한 주사위를 보여줍니다. 어떻게해야합니까?

+0

3 초를 사용할 수 있습니다 (당신이 원하는 경우 등, 중지) 더 유연하게하기 -> 변경 이미지 -> 다른 3 초 정도 기다립니다 -> 다시 변경하십시오. 그게 니가하고 싶은거야? –

+0

예, 정확하게. 주사위 표시 1, 3 초 대기, 주사위 표시 6, 3 초 대기, 주사위 표시 1 ... – Schnicke

답변

2

실행을 위해 실행 파일 안에 Handler.postDelayed을 다시 시작해야합니다. 같은

뭔가 :

final Handler handler = new Handler(); 
handler.postDelayed(new Runnable() { 
    private boolean useDiceOne; 

    @Override 
    public void run() { 
     ImageView image = (ImageView)findViewById(R.id.imgView_dice0); 
     if (!useDiceOne) { 
     image.setImageResource(R.drawable.dice_6); 
     } else { 
     image.setImageResource(R.drawable.dice_1); 
     } 
     useDiceOne = !useDiceOne; 
     handler.postDelayed(this, 3000);  
    } 
}, 3000); 

useDiceOnedice_1dice_6 p.s 사이에 이미지를 변경하는 데 사용됩니다는 ImageView를 캐시합니다.

당신이 어딘가에 핸들러 참조 (너무 실행 가능한 참조)를 저장하고 removeCallbacks

+0

완벽! 고맙습니다! :) – Schnicke

+0

추신 : 정확성을 위해서 : "useDiceOne"에 대한 substitude "timeForOne":) – Schnicke

+0

"timeForOne"이 매우 나빠 보이므로 이름을 변경했습니다. :) –