在添加和删除 TextView 之间暂停程序

我正在开发一款坦克游戏,我有一个TextView代表射击的游戏。现在我想TextView在特定点显示 并在一秒钟后将其删除,看起来镜头一步一步走得更远。但是,当我添加倒计时或 a 时,Thread.sleep程序会停止一秒钟,但TextView不会消失。我想将 TextView 移动到屏幕上,并且在 for 循环的每次迭代之后我想等待一秒钟,然后再次重新排列它?


这是代码:


 public void shot(float power, float winkel, Button button) {


        if(winkel>90) {

            winkel = winkel - 10;

        }else if(winkel<90){

            winkel = winkel +10;

        }

        for (double i = 0; i<100;i = i+ 1) {


            final TextView textView = new TextView(context);

            textView.setText(".");

            double x = tanks.get(currentTank).getxPos()+(i*power*Math.cos(winkel *(Math.PI/180)));

            double y = tanks.get(currentTank).getyPos()+(-1*(i*power*Math.sin(winkel *(Math.PI/180))));

            double gravity = (-1*((9.81/2)*Math.pow(i,2)));

            y = (y-gravity);

            textView.setX((float) x);

            textView.setY((float) y);

            layout.addView(textView);




            for (int j = 0;j<tanks.size();j++){

                if(textView.getX()>tanks.get(j).getxPos()&&textView.getX()<tanks.get(j).getxPos()+100){

                    if(textView.getY()>tanks.get(j).getyPos()&&textView.getY()<tanks.get(j).getyPos()+100){


                        float k = tanks.get(j).getxPos()-textView.getX();

                        if(k<0){

                            k = k*-1;

                        }

                        makeDamage(k,tanks.get(j));

                    }

                }

            }

            new CountDownTimer(2000,1000){


                @Override

                public void onTick(long millisUntilFinished) {


                }

                @Override

                public void onFinish() {

                    layout.removeView(textView);

                }

            }.start();

        }

        newTurn();

    }

我想在添加一秒钟后暂停程序TextView并将其删除。程序停止,但TextView直到 for 循环完成才消失。然后全部TextViews消失。


蛊毒传说
浏览 74回答 2
2回答

噜噜哒

问题解决了: 我已经添加了数组中的所有位置,然后这个public void drawShot(final Button firework, final ArrayList<TextView> toDraw){&nbsp; &nbsp; final int[] i = {0};&nbsp; &nbsp; final Handler mHandler = new Handler();&nbsp; &nbsp; firework.setOnClickListener(new View.OnClickListener() {&nbsp; &nbsp; &nbsp; &nbsp; @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN)&nbsp; &nbsp; &nbsp; &nbsp; @Override&nbsp; &nbsp; &nbsp; &nbsp; public void onClick(View v) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; firework(firework,toDraw.get(i[0]).getX(),toDraw.get(i[0]).getY());&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; });&nbsp; &nbsp; Runnable runnable = new Runnable() {&nbsp; &nbsp; &nbsp; &nbsp; @Override&nbsp; &nbsp; &nbsp; &nbsp; public void run() {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; layout.addView(toDraw.get(i[0]));&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if(!check(toDraw.get(i[0]))) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; mHandler.postDelayed(this, (long) 1);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i[0]++;&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; };&nbsp; &nbsp; // start it with:&nbsp; &nbsp; mHandler.post(runnable);}

炎炎设计

可能需要在主线程上运行删除命令Handler mainHandler = new Handler(context.getMainLooper());Runnable myRunnable = new Runnable() {&nbsp; &nbsp; @Override&nbsp;&nbsp; &nbsp; public void run() {&nbsp; &nbsp; &nbsp; &nbsp;layout.removeView(textView);&nbsp; &nbsp; }&nbsp;};mainHandler.post(myRunnable);
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java