我想要一個android應用程序,只要按下按鈕,背景就會閃爍。這有效,但是當我釋放按鈕時,背景不會停止閃爍。 我認爲原因是我正在使用線程。我不知道如何阻止它(我正在第一次使用線程)。我想我可以在Action_Up事件中編寫按鈕「threadname.stop()」,但Android studio無法解析名稱。 所以:我怎樣才能停止線程,使Action_Up案例得到執行? 非常感謝!一旦按鈕不再被按下,我怎樣才能停止線程?
我的MainActivity代碼:
import android.graphics.Color;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Button;
import android.widget.RelativeLayout;
public class MainActivity extends AppCompatActivity {
Button flash;
RelativeLayout layout;
boolean backgroundisblack;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
backgroundisblack = true;
layout = (RelativeLayout)findViewById(R.id.layout);
flash = (Button)findViewById(R.id.flash);
//Button
flash.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
//button is pressed
switch (event.getAction()){
case MotionEvent.ACTION_DOWN:{
//thread
Thread t = new Thread(){
@Override
public void run(){
while(!interrupted()){
try {
Thread.sleep(1000);
runOnUiThread(new Runnable(){
@Override
public void run(){
//action
if(backgroundisblack){
layout.setBackgroundColor(Color.WHITE);
backgroundisblack = false;
}else if (!backgroundisblack){
layout.setBackgroundColor(Color.BLACK);
backgroundisblack = true;
}
}
});
}catch (InterruptedException e){
e.printStackTrace();
}
}
}
};
t.start();
break;
}
//button is released
case MotionEvent.ACTION_UP:{
layout.setBackgroundColor(Color.BLACK);
break;
}
}
return false;
}
});
}
}
可能的重複[你如何殺死Java中的線程?](https://stackoverflow.com/questions/671049/how-do-you-kill-a-thread-in-java) – user1643723