为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

蛊毒传说 2023-10-12 17:20:24
我正在开发一款坦克游戏,我有一个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消失。
查看完整描述

2 回答

?
噜噜哒

TA贡献1784条经验 获得超7个赞

问题解决了: 我已经添加了数组中的所有位置,然后这个


public void drawShot(final Button firework, final ArrayList<TextView> toDraw){

    final int[] i = {0};

    final Handler mHandler = new Handler();


    firework.setOnClickListener(new View.OnClickListener() {

        @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN)

        @Override

        public void onClick(View v) {

            firework(firework,toDraw.get(i[0]).getX(),toDraw.get(i[0]).getY());

        }

    });



    Runnable runnable = new Runnable() {

        @Override

        public void run() {


                layout.addView(toDraw.get(i[0]));

                if(!check(toDraw.get(i[0]))) {

                    mHandler.postDelayed(this, (long) 1);

                }

                i[0]++;


        }

    };


    // start it with:

    mHandler.post(runnable);


}


查看完整回答
反对 回复 2023-10-12
?
炎炎设计

TA贡献1808条经验 获得超4个赞

可能需要在主线程上运行删除命令


Handler mainHandler = new Handler(context.getMainLooper());


Runnable myRunnable = new Runnable() {

    @Override 

    public void run() {

       layout.removeView(textView);

    } 

};

mainHandler.post(myRunnable);


查看完整回答
反对 回复 2023-10-12
  • 2 回答
  • 0 关注
  • 103 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信