android - 创建一个 "achievemenet progress"栏

标签 android progress-bar progress android-progressbar

所以我正在尝试为我的应用程序中的成就创建一个进度条。这些进度条应在 Activity 打开后显示其进度。我熟悉常规进度条,您可以在其中更新列表状态并在进度条上设置进度,但不知何故我无法完成此任务。在下面的代码中,我尝试创建一个进度条,填充到 30/100 然后停止,就好像“成就进度”是 30。为了便于理解,我使用简单的整数。当前行为甚至还没有结束,因为进度条只是在旋转而没有任何进度更新。请注意,进度与简单整数以外的任何其他组件无关。

编辑:这是我想要的行为:https://dribbble.com/shots/2758323-Ring-Progress

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_my_points);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    progressBar = (ProgressBar) findViewById(R.id.progressBar);
    progressBar.setIndeterminate(false);
    new TimedProgress();
}

class TimedProgress {
    Timer timer;

    public TimedProgress() {
        timer = new Timer();
        timer.schedule(new ProgressTask(), 0, 500);
    }

    class ProgressTask extends TimerTask {
        int progress = 0;
        public void run() {
            if (progress <30) {
                updateProgress(progress);
                progress++;
            } else {
                timer.cancel();
            }
        }
    }
}

public void updateProgress(final int progress) {
    if (null != progressBar) {
        progressBar.setVisibility(View.VISIBLE);
        progressBar.setProgress((int) progress);
    }
}

布局:

<ProgressBar
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/progressBar"
        android:layout_centerVertical="true"
        android:layout_alignParentEnd="true"/>

最佳答案

enter image description here

使用计时器来计算进度,例如每 1/2 秒(500 毫秒)。这是一个基本的 Java 计时器,您可以将其转换为适用于 Android 的 AsyncTask,从中获得乐趣!执行 AsyncTask,定时器每 1/2 秒更新一次进度条。

class TimedProgress {
    Timer timer;

    public TimedProgress() {
        timer = new Timer();
        timer.schedule(new ProgressTask(), 0, 500);
    }

    class ProgressTask extends TimerTask {
        int progress = 0;
        public void run() {
            if (progress <30) {
                updateProgress(progress);
                progress++;
            } else {
                timer.cancel();
            }
        }
   }
}

public void updateProgress(final int progress) {
    if (null != progressBar) {
        progressBar.setVisibility(View.VISIBLE);
        progressBar.setProgress((int) progress);
    }
}

关于android - 创建一个 "achievemenet progress"栏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37773814/

相关文章:

android自定义对话框放在中心,背景变暗

delphi - 在 Vista Aero 上禁用进度条动画

android - 如何以编程方式为每次旋转更改进度对话框 RING 颜色? (支持应该是最新的API)

java - 是否可以检查 URLconnection.getInputStream() 的进度?

php - 在单独的服务器上监控 zip 的进度

android - 缩小屏幕上的对话框

android - android 4.4.4 以下的进度对话框问题

ios进度条高度在ios 7和ios 6之间不同

Android - Facebook SDK - FriendPicker setSelected 不工作

android - 用dataoutputstream的write方法实现进度条