首页 > 解决方案 > 在添加和删除 TextView 之间暂停程序

问题描述

我正在做一个坦克游戏,我有一个TextView代表投篮的游戏。现在我想TextView在特定点显示并在一秒钟后将其删除,看起来镜头会一步一步地走得更远。但是当我添加倒计时或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消失。

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

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);

}

标签: javaandroid

解决方案


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

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

Runnable myRunnable = new Runnable() {
    @Override 
    public void run() {
       layout.removeView(textView);
    } 
};
mainHandler.post(myRunnable);

推荐阅读