更改视图的背景颜色?
我想创建的linear layout
一个子类,它的背景颜色必须改变黑色或White.I写了这个代码:更改视图的背景颜色?
public class MyLayout extends LinearLayout implements Runnable {
int color = 0xFFFFFFFF;
public MyLayout(Context context) {
super(context);
Thread t = new Thread(this);
t.start();
}
@Override
public void run() {
while (true) {
try {
Thread.sleep(1000);
if(color == 0xFF000000){
color = 0xFFFFFFFF;
}else{
color = 0xFF000000;
}
this.setBackgroundColor(color);
postInvalidate();
System.out.println("Color >> " + color);
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
然后,我将其设置为我的活动内容查看:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(new MyLayout(this));
}
在模拟器中运行应用程序后,run
方法MyLayout
执行没有任何异常,但背景颜色总是黑色。我做错了什么?在您试图postInvalidate
跟进@Hisham Muneer已,我送我的实例活动上我的课,它的工作原理。 runOnUiThread
在Activity
class.This的方法是finall代码:
public class MyLayout extends LinearLayout implements Runnable {
int color = 0xFFFFFFFF;
Activity context;
public MyLayout(Activity context) {
super(context);
this.context = context;
myView = this;
Thread t = new Thread(this);
t.start();
}
private View myView;
@Override
public void run() {
try {
while (true) {
Thread.sleep(1000);
context.runOnUiThread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
if (color == 0xFF000000) {
color = 0xFFFFFFFF;
} else {
color = 0xFF000000;
}
myView.setBackgroundColor(color);
postInvalidate();
System.out.println("Color >> " + color);
}
});
}
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
尝试无效()()
其他提示: 您正在创建一个新的LinearLayout,不指定版面大小。 我建议你使用setLayoutParams()使用的setContentView前:
MyLayout layout = new MyLayout(this);
layout.setLayoutParams(new LayoutParams(...));
this.setContentView(layout);
在这一刻,你正在创建一个新的布局0级(高度和宽度)
我试过无效()代替postInvalidate()和这个的LayoutParams:“的LayoutParams LP =新的LayoutParams(ViewGroup.LayoutParams.FILL_PARENT,ViewGroup中。 LayoutParams.FILL_PARENT);”但没有什么改变。 –
您是否将lp实例设置为布局? – noni
感谢您的关注。请参阅我的答案。 –
嗨试试这个它的工作。
public class MyLayout extends LinearLayout implements Runnable {
int color = 0xFFFFFFFF;
public MyLayout(Context context) {
super(context);
myView = this;
Thread t = new Thread(this);
t.start();
}
private View myView;
@Override
public void run() {
try {
while (true) {
Thread.sleep(1000);
runOnUiThread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
if (color == 0xFF000000) {
color = 0xFFFFFFFF;
} else {
color = 0xFF000000;
}
myView.setBackgroundColor(color);
postInvalidate();
System.out.println("Color >> " + color);
}
});
}
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
无论何时您想通过其他线程对用户界面进行更改,请在runOnUiThread中运行您的代码。
我试过了,但是我得到这个错误:方法runOnUiThread(new Runnable(){})未定义类型MyLayout –
感谢您的关注。 –
@StudentStudent也许你可以标记我的答案是正确的,如果真的有帮助 –
你不能在一个线程改变这种使用的AsyncTask
https://developer.android.com/reference/android/os/AsyncTask.html
protected void onPostExecute(Long result) {
//HERE YOU CAN CHANGE THE COLOR
}
当您更改颜色?请张贴代码 –
你在'System.out.println(“Color >>”+ color)中获得什么;'logcat中的行? –
@CsehTamás我试图在'run'方法中改变颜色。 –