繁体   English   中英

如何在计时器启动后和结束后更改TextView文本和颜色

[英]How to change a TextView text and color after a timer starts and after it ends

我是应用程序开发的新手,目前正在尝试制作计数器应用程序。 我已经设置了按钮,以使文本随按钮的更改而变化。 虽然,我试图使文本显示加或减值,然后再显示总数。

例如,我的计数器从20开始; 如果我按下添加按钮,我希望textview文本更改为+ 1,+ 2,+ 3,依此类推,但是在2秒钟的时间内多次按下该按钮。 2秒钟后,我希望textview再次显示总数。 因此,如果我按了3次,则在第3次按下2秒钟后,我希望它显示“ 23”而不是“ +3”。 然后,如果我只按下减号按钮一次,则文本视图将显示“ -1”,然后在2秒后更改为“ 22”,依此类推。我还希望按下添加按钮时文本颜色变为绿色,当按下添加按钮时文本颜色变为红色。显示总计时或默认情况下,减号被按下并显示为白色。

到目前为止,这是我的代码,我可能相距一英里,但是我真的希望在正确的方向显示一些帮助。

public class MainActivity extends Activity {

    private Thread timer;
    TextView lifepointsP1;
    ImageButton p1AddL, p1SubL;

    int counter1;
    int count;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        counter1 = 20;
        count = 0;
        lifepointsP1 = (TextView) findViewById(R.id.tvP1LP);
        p1AddL = (ImageButton) findViewById(R.id.bP1add);
        p1SubL = (ImageButton) findViewById(R.id.bP1take);

        //the timer

        timer = new Thread() {

            @Override
            public void run(){
                try {
                    synchronized(this){
                        wait(2000);
                    }
                } catch(InterruptedException e){  
                       e.printStackTrace();
                }
                count = 0;
                lifepointsP1.setTextColor(Color.argb(0, 0, 0, 0));
            }
        };

        p1AddL.setOnClickListener(new View.OnClickListener() {

        //the buttons

            public void onClick(View v) {
                counter1++;
                count++;
                if (count == 0) {
                    if (counter1 >= 9|counter1 <= -1) {
                        lifepointsP1.setText("" + counter1);
                    } else {
                        lifepointsP1.setText("0" + counter1);
                    }
                } else if (count > 0) {
                    lifepointsP1.setText("+" + count);
                    lifepointsP1.setTextColor(Color.argb(0, 0, 188, 0));
                }
            }
        });

        p1SubL.setOnClickListener(new View.OnClickListener() {

            public void onClick(View v) {
                counter1--;
                count--;
                if (count == 0) {
                    if (counter1 >= 9|counter1 <= -1) {
                        lifepointsP1.setText("" + counter1);
                    } else {
                        lifepointsP1.setText("0" + counter1);
                    }
                } else if (count < 0) {
                    lifepointsP1.setText("-" + count);
                    lifepointsP1.setTextColor(Color.argb(0, 214, 0, 0));
                }
            }
        });
    }

    //the counter reset if pressed

    @Override
    public boolean onTouchEvent(MotionEvent evt) {

        if(evt.getAction() == MotionEvent.ACTION_DOWN) {
            synchronized(timer){
                timer.start();
            }
        }
        return true;
    }
}

Ive还进行了设置,因此,如果在计时器计数时按下按钮,它将重置计数以重新开始。 非常感谢您提供的任何帮助,非常感谢!

您需要的是CountdownTimer

然后可以在onFinish()方法中实现逻辑。

您应该使用Handler类

处理程序使您可以发送和处理与线程的MessageQueue关联的Message和Runnable对象。 每个Handler实例都与一个线程和该线程的消息队列关联。 创建新的Handler时,它将绑定到正在创建它的线程的线程/消息队列中-从那时起,它将把消息和可运行对象传递到该消息队列,并在它们从消息中出来时执行它们队列。

处理程序有两个主要用途:(1)调度消息和可运行对象,以备将来执行。 (2)使要在与您自己的线程不同的线程上执行的操作排队。

public int i = 0;

然后:

final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
    @Override
    public void run() {
        if(i != 20) { 
                text.append(" " + i);
                i++;
                handler.postDelayed(this, 1000);
            } else {
                handler.removeCallbacks(this);
                text.append(" Stopped");
            }
        }
    }, 1000);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM