Java 如何在android中动态更改按钮颜色?
我想动态更改按钮的颜色 在编写、测试和研究之后,我发现显示线程应该与代码不同,所以我使用了一个处理程序 我正在尝试将按钮的颜色从默认更改为黑色一段时间,然后将其恢复为默认颜色, 但这并没有发生,它只是显示了一个默认按钮 下面是我的代码Java 如何在android中动态更改按钮颜色?,java,android,button,handler,Java,Android,Button,Handler,我想动态更改按钮的颜色 在编写、测试和研究之后,我发现显示线程应该与代码不同,所以我使用了一个处理程序 我正在尝试将按钮的颜色从默认更改为黑色一段时间,然后将其恢复为默认颜色, 但这并没有发生,它只是显示了一个默认按钮 下面是我的代码 import android.content.Intent; import android.graphics.Color; import android.support.v7.app.AppCompatActivity; import android.os.Bun
import android.content.Intent;
import android.graphics.Color;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import java.io.IOException;
import java.util.Random;
import android.os.Handler ;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
Button b1;
Random r = new Random();
int random_selection;
int i;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
b1 = (Button) findViewById(R.id.button);
b1.setOnClickListener(this);
main();
}
public void main() {
// Thread t1 = new Thread(new MainActivity());
// this wi run() function
Handler handler1 = new Handler();
handler1.postDelayed(new Runnable() {
@Override
public void run() {
int count = 0;
try {
System.out.println("inside run");
for (i=0;i<4 ;i++ )
// android.widget.Toast.makeText(getBaseContext(), count,android.widget.Toast.LENGTH_SHORT).show();
Handler handler2 = new Handler();
int x = randomgen();
// android.widget.Toast.makeText(getBaseContext(), x,android.widget.Toast.LENGTH_SHORT).show();
if (x == 1) {
b1.setBackgroundColor(Color.BLACK);
handler2.postDelayed(new Runnable() {
@Override
public void run() {
b1.setBackgroundResource(android.R.drawable.btn_default);
}
}, 10000);
} else if (x == 2) {
b2.setBackgroundColor(Color.BLACK);
handler2.postDelayed(new Runnable() {
@Override
public void run() {
b2.setBackgroundResource(android.R.drawable.btn_default);
}
}, 2000);
} else if (x == 3) {
b3.setBackgroundColor(Color.BLACK);
handler2.postDelayed(new Runnable() {
@Override
public void run() {
b3.setBackgroundResource(android.R.drawable.btn_default);
}
}, 2000);
} else if (x == 4) {
b4.setBackgroundColor(Color.BLACK);
handler2.postDelayed(new Runnable() {
@Override
public void run() {
b4.setBackgroundResource(android.R.drawable.btn_default);
}
}, 2000);
}
}
}catch (Exception e) {
System.out.println("inside catch");
e.printStackTrace();
}
}
}, 1000 );
}
public int randomgen() {
random_selection = r.nextInt(4) + 1;
return random_selection;
}
导入android.content.Intent;
导入android.graphics.Color;
导入android.support.v7.app.AppActivity;
导入android.os.Bundle;
导入android.view.view;
导入android.widget.Button;
导入java.io.IOException;
导入java.util.Random;
导入android.os.Handler;
公共类MainActivity扩展AppCompatActivity实现View.OnClickListener{
按钮b1;
随机r=新随机();
int随机选择;
int i;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
b1=(按钮)findViewById(R.id.Button);
b1.setOnClickListener(本);
main();
}
公共图书馆{
//线程t1=新线程(新的MainActivity());
//此函数是wi run()函数
Handler handler1=新的Handler();
handler1.postDelayed(新的Runnable(){
@凌驾
公开募捐{
整数计数=0;
试一试{
System.out.println(“内部运行”);
对于(i=0;i原因是您的b1.setBackgroundResource(android.R.drawable.btn_默认);
在延迟处理程序之外
将功能main
更改为:
public void main() {
int count = 0;
Handler handler1 = new Handler();
handler1.postDelayed(new Runnable() {
Handler handler2 = new Handler();
@Override
public void run() {
try {
System.out.println("inside run");
// android.widget.Toast.makeText(getBaseContext(), x,android.widget.Toast.LENGTH_SHORT).show();
b1.setBackgroundColor(Color.BLACK);
handler2.postDelayed(new Runnable() {
@Override
public void run() {
b1.setBackgroundResource(android.R.drawable.btn_default);
}
}, 2000);
} catch (Exception e) {
System.out.println("inside catch");
e.printStackTrace();
}
}
}, 1000);
}
请改用线程:
b1.setBackgroundColor(Color.BLACK);
new Thread(new Runnable() {
@Override
public void run() {
try { System.sleep(2000) } catch(Exception e) {}
runOnUiThread(new Runnable() {
@Override
public void run() {
b1.setBackgroundResource(android.R.drawable.btn_default);
}
});
}
}).start();
但是如果我使用四个按钮并随机选择它们,然后使用相同的代码,比如if(x=1)然后上面的代码elseif x=2,然后上面的代码是b2….,但如果超过2秒,则变为黑色,然后什么也没有happens@G.ONE贴上你的代码,我可以看一看,我已经添加了代码,我想要的是一次只有一个按钮应该是彩色的,但是多个按钮同时变黑,生成1到10之间的随机数4@G.现在发生的一件事是,你的randomgen
可以输出一个已经使用过的数字。如果你System.out.println(“随机数::”+x);
你会看到它可以是一样的。你想让它们不一样吗?谢谢它的工作,但是如果我使用四个按钮,随机选择它们,然后像if(x=1)一样使用相同的代码然后上面的代码elseif x=2,然后上面的代码是b2….,但更多的是on会变黑2秒,然后什么都没有发生检查您的代码,可能是您以错误的方式放置了一些内容。我建议您将我的代码放入一个具有以下参数的方法changeButton(按钮b1){//上面的代码}