当进度栏达到最大值时,如何重置进度栏并为其赋予新值?

时间:2019-07-17 08:52:56

标签: java android progress-bar

我正在制作一个Clicker游戏,您在其中点击一个按钮以增加能量。 当我的进度栏达到最大值时,它将重置并将最大值设置为下一个更高的值(一切都会正常进行)。 但是,当我再次点击时,进度会以旧的最大值增加,但此后通常会继续。 我不知道该如何解决

public class MainActivity extends AppCompatActivity {

    public int MinPoints = 0;
    public int MaxPointsSSJ = 10;
    public int MaxPointsSSJ2 = 20;
    public int MaxPointsSSJ3 = 50;
    public int Progress;

    private void checker(int currentPoints, int maxPoints, int
newmaxPoints, ImageView anzeige, int bild, ProgressBar pb){
        if (currentPoints == maxPoints)
            maxPoints = newmaxPoints;
            pb.setMax(newmaxPoints);
            anzeige.setImageResource(bild);
            pb.setProgress(currentPoints - maxPoints);
            }


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

        final ImageView Anzeige = (ImageView) findViewById(R.id.imageView);
        final ProgressBar KiAnzeige = (ProgressBar) findViewById  (R.id.progressBar);
        Button MehrEnergie = (Button) findViewById(R.id.button);

    KiAnzeige.setMax(MaxPointsSSJ);
    KiAnzeige.setMin(MinPoints);
    KiAnzeige.setProgress(0);
    Progress = KiAnzeige.getProgress();

    MehrEnergie.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Progress++;
            KiAnzeige.setProgress(Progress);
            if (Progress == MaxPointsSSJ){
                checker(Progress, MaxPointsSSJ, MaxPointsSSJ2, Anzeige, R.drawable.goku_ssj1, KiAnzeige);
            }
        if (Progress == MaxPointsSSJ2){
            checker(Progress, MaxPointsSSJ2, MaxPointsSSJ3, Anzeige, R.drawable.goku_ssj2, KiAnzeige);
        }
        }
    });
}

}

3 个答案:

答案 0 :(得分:1)

设置进度条的状态,以便进度无限显示。

KiAnzeige.setIndeterminate(true);

答案 1 :(得分:0)

尝试

MehrEnergie.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            ++Progress;
            KiAnzeige.setProgress(Progress);
            if (Progress == MaxPointsSSJ){
                checker(Progress, MaxPointsSSJ, MaxPointsSSJ2, Anzeige, R.drawable.goku_ssj1, KiAnzeige);
            }
        if (Progress == MaxPointsSSJ2){
            checker(Progress, MaxPointsSSJ2, MaxPointsSSJ3, Anzeige, R.drawable.goku_ssj2, KiAnzeige);
        }
        }
    });

答案 2 :(得分:0)

您的OnClick函数将进度条进度增加1,但是在checker函数中,您将进度条进度设置为0,这是有效的,因为currentPoints等于maxPoints。

所以在OnClick中,它看起来像1 / 10、2 / 10、3 / 10,... 10/10,然后触发checker,将其设置为0/20 ,然后返回到OnClick,在此继续为11 / 20、12 / 20、13 / 20等。

您可以通过将最大值更改为新的最大值和旧的最大值之间的差异,然后将“进度”设置回0来解决此问题,或者在设置进度时考虑差异。

或者,如果您希望进度条“加宽”以便仍显示以前的点击,但是进度条的比例会增加,则只需在{{中将进度设置为currentPoints 1}}功能。