java - 按钮倒计时 - Android

标签 java android animation button countdown

我想实现一个按下时倒计时的按钮。这个想法是允许用户取消按钮的激活。一旦按下,我希望按钮变为红色并显示“取消(3)”并倒计时为“取消(0)”,如果再次按下,倒计时将停止并且不会发生任何事情。如果不取消,则时间到后应用程序将进入下一个屏幕。有没有办法每秒更新按钮的文本(用于倒计时)并更改其功能?

谢谢

最佳答案

您可以在处理程序上使用 postDelayed 稍后在 UI 线程上调用您的方法,以便您可以更新 UI。

实际上已经有一篇非常好的文章介绍了如何在 Android 上完成此操作:http://developer.android.com/resources/articles/timed-ui-updates.html

您可以通过在 UI 线程上运行的代码中创建一个处理程序,或者通过在 View (例如按钮本身)上调用 getHandler() 来获取处理程序。

我会提供一个示例,但链接的文章已经提供了非常详细和清晰的示例,因此我会遵循它。

编辑:以下是其外观的粗略概述。我现在没有安装 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 工作正在进行时),但对于您的目的来说应该足够了。

关于java - 按钮倒计时 - Android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9245936/

相关文章:

java - JSF 从页面加载的那一刻起就国际化了。

java - 装饰器设计模式绑定(bind)到同一接口(interface)

android - RxJava、OkHttp、Okio、Android 中的文件下载器

android - 我可以从应用程序中启动系统 PIN 身份验证吗?

javascript - JS动画会覆盖自身而不是替换

javascript - 点击图库中的图片后滑出描述

android - 如何在主屏幕android上实现图标动画?

java - 从 Criteria 获取 SQL

java - Java 时态库

java - 如何修改默认的 Android 自动 Activity 栏