我在一段时间后更改按钮颜色时遇到问题。我知道如何在固定时间后更改使用句柄,但我需要在用户选择的特定时间后更改颜色。
public class MainActivity extends Activity {
EditText tempo;
Button bt;
int estado = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tempo = (EditText) findViewById(R.id.tempo);
long delay = Long.parseLong(tempo.getText().toString());
bt = (Button) findViewById(R.id.btvibrar);
bt.setOnClickListener(new View.OnClickListener() {
public void onClick(View arg0) {
if(!tempo.getText().toString().equals("")){
if(estado==1){
Vibrar();
estado*=-1;
bt.setText("Parar !");
bt.setBackgroundColor(Color.RED);
//Handler handler = new Handler();
//handler.postDelayed(new Runnable() {
//@Override
//public void run() {
//estado*=-1;
//bt.setText("Vibrar !");
//bt.setBackgroundColor(Color.GREEN);
//}
// }, );
} else {
Parar();
estado*=-1;
bt.setText("Vibrar !");
bt.setBackgroundColor(Color.GREEN);
}
} else {
AlertDialog.Builder dialogo = new AlertDialog.Builder(MainActivity.this);
dialogo.setTitle("Erro !");
dialogo.setMessage("Escolha um tempo.");
dialogo.setNeutralButton("OK", null);
dialogo.show();
}
}
private void Vibrar(){ // É necessario lançar excessao no ANDROIDMANIFEST.XML
Vibrator rr = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
long treal = Long.parseLong(tempo.getText().toString());
long milliseconds = treal*1000;
rr.vibrate(milliseconds);
}
private void Parar(){
Vibrator rr = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
rr.cancel();
}
});
}
}
答案 0 :(得分:0)
此代码将按钮的颜色切换为红色:
bt.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
new AsyncTask<Long, Void, Void>() {
@Override
protected Void doInBackground(Long... delay) {
if (delay.length > 0) {
try {
Thread.sleep(delay[0]);
} catch (InterruptedException e) {
}
}
return null;
}
@Override
protected void onProgressUpdate(Void... none) {
}
@Override
protected void onPostExecute(Void none) {
if (ContactManager.this != null && !ContactManager.this.isFinishing()) {
bt.getBackground().setColorFilter(0xFFFF0000, PorterDuff.Mode.MULTIPLY);
bt.invalidate();
}
}
}.execute(new Long(delay));
}
});
它使用delay
变量进行延迟。希望这会有所帮助...
干杯!