2012-09-01 3 views
0

작동해야하지만 작동하지 않습니다. 앱을 시작하면 버튼이 표시됩니다. 이제 버튼이 보이고 보이지 않게하고 싶습니다.for 루프의 토글 버튼 가시성

for 루프가 너무 빨라서 안드로이드가 표시 할 수 없습니까? 아무 반응이 없습니다. 나는 버튼을 본다.

나는 Thread.sleep()을 가지고있다. 수면 밀리 초는 예 : 100, 300 -> 무작위. 또한 너무 빠를 수 없습니다.

답변

3

나는 Thread.sleep()을 가지고있다. 수면 밀리 초는 예 : 100, 300 -> 무작위. 또한 너무 빠를 수 없습니다.

UI 스레드에서 자고 있습니다. 그것이 문제이다. UI 스레드의 나머지 부분에 작업을 맡기지 않을 것입니다.

UI를 주기적으로 업데이트하려는 경우 타이머를 대신 사용하거나 각 업데이트가 끝날 때 Handler.postDelayed으로 전화하여 다음 업데이트를 예약해야합니다. 또는 Property Animation system을 사용하십시오.

0

버튼을 깜박이려면 알파 채널을 변경하여 애니메이션을 적용하십시오.

1

WebnetMobile.com 및 Jon Skeet이 맞습니다. 당신은 찾고있는 효과를 위해 타이머 나 애니메이션을 사용해야합니다.

for (k = 0; k < abc.length; ++k) { 
try { 

    if (k%2 != 0) { 
     button.setVisibility(View.VISIBLE); 
    Thread.sleep(sleepMilliseconds); 

    } else { 
     button.setVisibility(View.GONE); 
    Thread.sleep(sleepMilliseconds); 
    } 


} catch (InterruptedException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 
} 

을 시각적으로 그들

1

이 시도 희망 도움이 당신을보고 500에 비해 그 밀리 초 더 폐하를 만들기 : 당신이 정말로 싶어이 당신의 방식으로이 작업을 수행 할 경우 다음과 같이

은 그러나 않습니다. .

는 클래스 변수를 선언하고 활동 클래스에서이 클래스 및이 방법을 추가

//variabe 
boolean b; 

//class 
class RefreshHandler extends Handler { 
    @Override 
    public void handleMessage(Message msg) { 
     _yourActivity.this.updateUI();   
    } 

    public void sleep(long delayMillis) { 
     this.removeMessages(0); 
     sendMessageDelayed(obtainMessage(0), delayMillis); 
    } 

    public void stop(){ 
     super.sendEmptyMessage(0); 
    } 

} 

//method 
public void updateUI() { 

if (b) { 
    button.setVisibility(View.VISIBLE); 
    b=false; 
} else { 
    button.setVisibility(View.GONE); 
    b=true; 
} 
    mRedrawHandler.sleep(1000); 
} 

다음 버튼을

mRedrawHandler = new RefreshHandler(); 
updateUI1(); 

의 가시성 투명를 시작하려면이를 사용하고이 사용을 중지 할 수 있습니다

mRedrawHandler.removeMessages(0);