【问题标题】:How to do sets for my android workout application?如何为我的 android 锻炼应用程序进行设置?
【发布时间】:2020-07-22 12:07:36
【问题描述】:

首先感谢阅读本文。 受瑜伽应用教程的启发,我为我的团队制作了一个锻炼应用。我的问题是在瑜伽应用程序中你没有很多套,只有一套,我想添加套。我试图在我的 ShowExercises 中创建一个for(int i = 0; i < 50; i++),但它没有用,我希望重复练习,而不仅仅是练习。 这是我的代码,


import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.os.CountDownTimer;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ProgressBar;
import android.widget.TextView;

import com.example.workout_sure.Database.SWADB;
import com.example.workout_sure.Model.Exercise;
import com.example.workout_sure.Utils.Common;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;

import me.zhanghai.android.materialprogressbar.MaterialProgressBar;

public class Daily_Training extends AppCompatActivity {

    Button btnStart;
    ImageView ex_image;
    TextView txtGetReady,txtCountdown,txtTimer,ex_name,detail_text;
    ProgressBar progressBar;
    LinearLayout layoutGetReady;


    int ex_id=0,limit_time=0;

    List<Exercise> list = new ArrayList<>();

    SWADB swaDB;


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

        initData();
        swaDB =  new SWADB(this);





        btnStart = (Button)findViewById(R.id.btnStart);

        ex_image = (ImageView)findViewById(R.id.detail_image);
        detail_text = (TextView)findViewById(R.id.detail_text);

        txtCountdown = (TextView)findViewById(R.id.txtCountdown);
        txtGetReady = (TextView)findViewById(R.id.txtGetReady);
        txtTimer = (TextView)findViewById(R.id.timer);
        ex_name = (TextView)findViewById(R.id.title);

        layoutGetReady = (LinearLayout)findViewById(R.id.layout_get_ready);

        progressBar = (MaterialProgressBar)findViewById(R.id.progressBar);

        //Set data
        progressBar.setMax(list.size());

        setExerciseInformation(ex_id);

        btnStart.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if(btnStart.getText().toString().toLowerCase().equals("commencer"))
                {
                    showGetReady();
                    btnStart.setText("fini");
                }
                else if(btnStart.getText().toString().toLowerCase().equals("fini"))
                {

                    if(swaDB.getSettingMode() == 0)
                        exercisesEasyModeCountDown.cancel();
                    if(swaDB.getSettingMode() == 1)
                        exercisesMediumModeCountDown.cancel();
                    if(swaDB.getSettingMode() == 2)
                        exercisesHardModeCountDown.cancel();


                    restTimeCountDown.cancel();

                    if(ex_id < list.size())
                    {
                        showRestTime();
                        ex_id++;
                        progressBar.setProgress(ex_id);
                        txtTimer.setText("");
                    }
                    else
                        showFinished();
                }
                else
                {
                    if(swaDB.getSettingMode() == 0)
                        exercisesEasyModeCountDown.cancel();
                    if(swaDB.getSettingMode() == 1)
                        exercisesMediumModeCountDown.cancel();
                    if(swaDB.getSettingMode() == 2)
                        exercisesHardModeCountDown.cancel();
                    restTimeCountDown.cancel();

                    if(ex_id < list.size())
                        setExerciseInformation(ex_id);
                    else
                        showFinished();
                }


            }
        });
    }

    private void showRestTime() {
        ex_image.setVisibility(View.INVISIBLE);
        btnStart.setText("Passer");
        btnStart.setVisibility(View.VISIBLE);
        txtTimer.setVisibility(View.INVISIBLE);
        detail_text.setVisibility(View.INVISIBLE);

        layoutGetReady.setVisibility(View.VISIBLE);

        restTimeCountDown.start();

        txtGetReady.setText("TEMPS DE REPOS");


    }

    private void showGetReady() {
        ex_image.setVisibility(View.INVISIBLE);
        btnStart.setVisibility(View.INVISIBLE);
        txtTimer.setVisibility(View.VISIBLE);
        detail_text.setVisibility(View.INVISIBLE);




        layoutGetReady.setVisibility(View.VISIBLE);

        txtGetReady.setText("PREPARE TOI");
        new CountDownTimer(6000,1000)
        {

            @Override
            public void onTick(long millisUntilFinished) {
                txtCountdown.setText(""+(millisUntilFinished/1000));
            }

            @Override
            public void onFinish() {
                showExercises();
            }
        }.start();

    }

    private void showExercises() {
        if(ex_id < list.size())  //list size y'a ts les exos
        {

                ex_image.setVisibility(View.VISIBLE);
                btnStart.setVisibility(View.VISIBLE);
                layoutGetReady.setVisibility(View.INVISIBLE);
                detail_text.setVisibility(View.VISIBLE);

                if (swaDB.getSettingMode() == 0)
                    exercisesEasyModeCountDown.start();
                if (swaDB.getSettingMode() == 1)
                    exercisesMediumModeCountDown.start();
                if (swaDB.getSettingMode() == 2)
                    exercisesHardModeCountDown.start();

                //Set Data youno

                ex_image.setImageResource(list.get(ex_id).getImage_id());
                ex_name.setText(list.get(ex_id).getName());
                detail_text.setText(list.get(ex_id).getDetail());



        }
        else
            showFinished();

    }



    private void showFinished() {

        ex_image.setVisibility(View.INVISIBLE);
        btnStart.setVisibility(View.INVISIBLE);
        txtCountdown.setVisibility(View.INVISIBLE);
        layoutGetReady.setVisibility(View.VISIBLE);
        detail_text.setVisibility(View.INVISIBLE);
        progressBar.setVisibility(View.INVISIBLE);


        txtGetReady.setText("FINISHED !!!");
        txtCountdown.setText("Félicitations ! \n Tu as fini ton entraînement ;) ");
        txtCountdown.setTextSize(20);

        //Sauvegarder le workout de fou tavusa dans la db
        swaDB.saveDay(""+ Calendar.getInstance().getTimeInMillis());
    }

    // Countdown

    CountDownTimer exercisesEasyModeCountDown = new CountDownTimer(Common.TIME_LIMIT_EASY,1000) {
        @Override
        public void onTick(long millisUntilFinished) {
            txtTimer.setText(""+1/1000);
        }

        @Override
        public void onFinish() {
            if(ex_id < list.size() -1)
            {
                ex_id++;
                progressBar.setProgress(ex_id);
                txtTimer.setText("");


                setExerciseInformation(ex_id);
                btnStart.setText("Commencer");

            }
            else
            {
                showFinished();
            }
        }
    };
    CountDownTimer exercisesMediumModeCountDown = new CountDownTimer(Common.TIME_LIMIT_EASY,1000) {
        @Override
        public void onTick(long millisUntilFinished) {
            txtTimer.setText(""+1/1000);
        }

        @Override
        public void onFinish() {
            if(ex_id < list.size() -1)
            {
                ex_id++;
                progressBar.setProgress(ex_id);
                txtTimer.setText("");


                setExerciseInformation(ex_id);
                btnStart.setText("Commencer");

            }
            else
            {
                showFinished();
            }
        }
    };
    CountDownTimer exercisesHardModeCountDown = new CountDownTimer(Common.TIME_LIMIT_EASY,1000) {
        @Override
        public void onTick(long millisUntilFinished) {
            txtTimer.setText(""+1/1000);
        }

        @Override
        public void onFinish() {
            if(ex_id < list.size() -1)
            {
                ex_id++;
                progressBar.setProgress(ex_id);
                txtTimer.setText("");


                setExerciseInformation(ex_id);
                btnStart.setText("Commencer");

            }
            else
            {
                showFinished();
            }
        }
    };


    CountDownTimer restTimeCountDown = new CountDownTimer(10000,1000) {
        @Override
        public void onTick(long millisUntilFinished) {
            txtCountdown.setText(""+(millisUntilFinished/1000));
        }

        @Override
        public void onFinish() {
            setExerciseInformation(ex_id);
            showExercises();
        }
    };


    private void setExerciseInformation(int id) {
        ex_image.setImageResource(list.get(id).getImage_id());
        ex_name.setText(list.get(id).getName());
        detail_text.setText(list.get(id).getDetail());
        btnStart.setText("Commencer");

        ex_image.setVisibility(View.VISIBLE);
        btnStart.setVisibility(View.VISIBLE);
        txtTimer.setVisibility(View.VISIBLE);
        detail_text.setVisibility(View.VISIBLE);


        layoutGetReady.setVisibility(View.INVISIBLE);



    }


    private void initData() {

        list.add(new Exercise(R.drawable.test,"Positionne-toi face au sol, les mains hauteur d’épaules. Les jambes ne sont pas loin derrière. Rapproche tes jambes de manière à former un angle avec ton corps.\n" +
                "Ton dos doit rester bien droit et ta tête doit être dans le même alignement que ton dos pendant toute l’exécution du mouvement.\n" +
                "Descends en PLONGEANT EN AVANT tout en restant le dos droit  puis repousse fermement pour remonter.\n" ," Pompes Pike"));
        list.add(new Exercise(R.drawable.clappushups, "Mets toi en position pompe (dos droit, bien gainé, bras tendus), descends jusqu'à ce que tes pecs touchent le sol puis pousse de façon explosive de sorte à faire décoller ton corps loin du sol et pouvoir claquer dans tes mains.", "Pompes claquées"));
        list.add(new Exercise(R.drawable.dips, "En appui sur les barres, buste légèrement penché vers l’avant , fléchis les bras jusqu’à ce que ceux-ci se retrouvent à l’horizontal , puis pousse pour revenir à la position initiale.Reste toujours gainé.", "Dips"));
        list.add(new Exercise(R.drawable.diamondpushups, "Mets tes mains en prise serrée ou en forme de triangle, comme sur la video ci-dessus, fais ton maximum de pompes.\n Sans prendre de repos, écarte tes mains et fais ton maximum de répétitions. \n Enfin, reprends une prise basique avec tes mains et fais ton maximum de pomeps.", "Superset Pompes(Diamant-Ecartées-Basiques)"));
        list.add(new Exercise(R.drawable.jumpsquats, "Enchaîne un squat avec un saut.", "Squats Sautés"));

    }
}

我的代码带有 for :

        if(ex_id < list.size())  //list size y'a ts les exos
        {
            for (int i = 0; i < 3; i++) {

                ex_image.setVisibility(View.VISIBLE);
                btnStart.setVisibility(View.VISIBLE);
                layoutGetReady.setVisibility(View.INVISIBLE);
                detail_text.setVisibility(View.VISIBLE);


                //Set Data youno

                ex_image.setImageResource(list.get(ex_id).getImage_id());
                ex_name.setText(list.get(ex_id).getName());
                detail_text.setText(list.get(ex_id).getDetail());

                showRestTime();
            }

        }
        else
            showFinished();

    }

非常感谢, 斯蒂芬

【问题讨论】:

  • 你在哪里循环使用
  • 我在私有 void showExercises 上使用了 for,在第一个 if 下方
  • 在 for 循环的末尾添加 showRestTime()。但在大括号中。
  • 嘿,谢谢你的回答,我试过了,但是当我在末尾添加 showRestTime() 时,无限期地重复 showGetReady() 和 showRestTime(),当我不添加时showRestTime 它没有做任何事情,比如 for 不存在:/我在帖子中添加了我的代码和 for

标签: java android conditional-statements


【解决方案1】:

我在我的 initData() 中添加了一个字符串值,它是每个练习的组数(换句话说,我希望我的 showExercises() 重复的次数)并且我想添加一个 int 和 if这个 int 值不对应于字符串添加 int++ 否则只是去另一个练习 例如,字符串值 set_number 为 3,我想创建一个等于 0 的 int(或其他东西,这只是一个想法)。在 restTimeCountdown 之后,如果 int 不等于 3,则 int++,否则继续我的代码 这是我想的代码,但它缺少我不知道该怎么做的 int 配置

在这种情况下我们需要的 startButton 部分以及我考虑过的修改:

                else if(btnStart.getText().toString().toLowerCase().equals("fini"))
                {


                    if(ex_id < list.size())
                    {
                        // Int configuration that I don't know how to do

                        if (int != //the set_number value we can recuperate with getSetValue but I don't know how to recuperate it in an int )
                        {
                            showRestTime();
                        }
                        else
                        {


                            showRestTime();
                            ex_id++;
                            progressBar.setProgress(ex_id);
                            txtTimer.setText("");
                        }
                    }
                    else
                        showFinished();
                }

演出休息时间:

 private void showRestTime() {
        ex_image.setVisibility(View.INVISIBLE);
        btnStart.setText("passer");
        btnStart.setVisibility(View.VISIBLE);
        txtTimer.setVisibility(View.INVISIBLE);
        detail_text.setVisibility(View.INVISIBLE);

        layoutGetReady.setVisibility(View.VISIBLE);

        restTimeCountDown.start();

        txtGetReady.setText("TEMPS DE REPOS");


    }

其余时间倒计时:


  CountDownTimer restTimeCountDown = new CountDownTimer(10000,1000) {
        @Override
        public void onTick(long millisUntilFinished) {
            txtCountdown.setText(""+(millisUntilFinished/1000));
        }

        @Override
        public void onFinish() {

            setExerciseInformation(ex_id);
            showExercises();
        }
    };

整个代码都在我的帖子里,非常感谢

【讨论】:

    【解决方案2】:

    我阅读了您的要求,根据您的要求,您希望逐个显示并重复它们。

    您可以做的是为您的每组创建一个CountDownTimer 设置时间段,然后在完成一组后,移动到下一个,当您的 setsList 达到最后一个时重置或重复计时器。

    示例代码

      int counter=-1;
    
        CountDownTimer timer=null;
        ArrayList<Foo> setsArrayList=null;
    
    
        // foo is generic class(add your model for sets) , and setFoo is object that contains single set details. 
        void startTimer(Foo setFoo) {
    
          if(null!=timer){
              timer.cancel();
           }
    
    
    
        timer=new CountDownTimer(totalTime, setFoo.singleSetTime) {
    
             public void onTick(long millisUntilFinished) {
                counter++;
    
                updateUI(setsArrayList.get[counter])
    
             }
    
             public void onFinish() {
                //"done!" or repeat all sets if you want to
                counter=0;
             updateUI(setsArrayList.get[counter])
             }
          }.start();
    
    
        }
    

    【讨论】:

    • 哦,谢谢先生!我要试试!有没有办法在移动到下一个之前重复设置?
    • 是的,您可以这样做,但如果您想重复重新插入并从第一个索引开始,则会显示某种弹出窗口。
    • 在 onFinish 方法中,如果你想重复它,你可以在用户点击重复时显示弹出窗口或按钮,然后将计数器重置为 0 并更新 UI。
    • 嗨,我试图使用你的代码,然后我意识到你需要一个特定的时间,我没有它:确实,我的 showExercises 的 CountDownTimer 不起作用(而且我没有想要修复它对我来说更好哈哈)所以当用户单击 showExercises 的完成按钮时会显示休息时间,他可以随时单击此按钮。有没有办法在休息时间之后自动重复一组简单的 x 次?抱歉,感谢您为我花费的时间
    • 如果你不想增加时间......然后只需在你的 UI 底部添加下一步和重复按钮,在下一次增加计数器并重复播放该设置时......
    猜你喜欢
    • 2018-10-25
    • 1970-01-01
    • 1970-01-01
    • 2019-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多