2012-02-12 2 views
1

누를 때 카운트 다운되는 버튼을 구현하고 싶습니다. 이 아이디어는 사용자가 버튼의 활성화를 취소 할 수 있도록하는 것입니다. 한번 누르면 버튼이 빨간색으로 바뀌고 "CANCEL (3)"을 읽고 "CANCEL (0)"으로 카운트 다운을하고 다시 누르면 카운트 다운이 멈추고 아무 것도 일어나지 않을 것입니다. 취소되지 않은 경우 앱은 시간이 지나면 다음 화면으로 이동합니다. 버튼의 텍스트를 초당 (카운트 다운을 위해) 업데이트하고 기능을 변경하는 방법이 있습니까? 당신은 UI를 업데이트 할 수 있도록 당신은 핸들러에 postDelayed을 사용할 수 있습니다버튼 카운트 다운 - Android

감사

+0

asynctask를 사용하여 단추 텍스트를 업데이트하십시오. –

답변

4

는 UI 스레드에서 나중에 메소드를 호출합니다.

실제로이 이미 안드로이드에서 수행하는 방법에 대한 아주 좋은 기사 있습니다 : http://developer.android.com/resources/articles/timed-ui-updates.html

당신은, 또는 뷰에 getHandler()를 호출하여 UI 스레드에서 실행되는 코드를 생성하여 하나의 핸들러를 얻을 수 있습니다 (예 : 귀하의 버튼 자체).

나는 예제를 제공 하겠지만 링크 된 기사는 이미 매우 상세하고 명료하게 작성되어 있으므로 참고할 것입니다.

편집 : 여기 어떻게 보이는지 대략적인 개요가 나와 있습니다. 지금 Android SDK가 설치되어 있지 않아이 기능이 작동하는지 확인할 수 없습니다.

public class CountdownButton extends Button { 
    private boolean isCounting = false; 
    private int count; 

    private final Runnable countdownRunnable = new Runnable() { 
    @Override 
    public void run() { 
     setText(Integer.toString(count)); 
     if (count > 0) { 
     count--; 
     getHandler().postDelayed(countdownRunnable, 1000); 
     } else { 
     // count reached zero 
     isCounting = false; 
     setText("boom"); 
     } 
    } 
    } 

    private final View.OnClickListener onClickListener = new View.OnClickListener() { 
    @Override 
    public void onClick(View view) { 
     if (isCounting) { 
     // stop counting 
     isCounting = false; 
     getHandler().removeCallbacks(countdownRunnable); 
     setText("cancelled"); 
     } else { 
     // start counting 
     isCounting = true; 
     count = 10; 
     countdownRunnable.run(); 
     } 
    } 
    } 

    public CountdownButton(Context context) { 
    super(context); 
    setOnClickListener(onClickListener); 
    } 

    public CountdownButton(Context context, AttributeSet attrs) { 
    super(context, attrs); 
    setOnClickListener(onClickListener); 
    } 

    public CountdownButton(Context context, AttributeSet attrs, int defStyle) { 
    super(context, attrs, defStyle); 
    setOnClickListener(onClickListener); 
    } 
} 

타이밍

완벽하지 않을 수 있습니다 (다른 CPU 작업이 진행이 많이있다 특히), 그러나 당신의 목적을 위해 충분해야한다.

+0

괜찮아요. 올바른 방향과 같습니다. 버튼의 텍스트를 어떻게 업데이트합니까? – mkyong

+0

'setText' (http://developer.android.com/reference/android/widget/TextView.html#setText%28java.lang.CharSequence%29)를 호출하여 버튼의 텍스트를 설정할 수 있습니다. –

+0

매초마다 텍스트를 업데이트하는 방법에 대한 예제를 제공 할 수 있다고 생각하십니까? 나는 setText와 그 작동 방식을 이해하지만, 핸들러는 나를 혼란스럽게 만든다. – mkyong