我正在开发一个应用程序,我试图在两种颜色的布局(线性布局)之间连续翻转,但颜色没有按预期变化。当我运行应用程序时,它等待,只有最后提到的颜色被更改,而且也只有一次,我怀疑一旦应用程序尝试更改颜色,布局就无法更改颜色,因此该应用只能更改一次颜色。
以下是代码
flasher.java
package com.tutorial.flasher;
import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
//import android.os.SystemClock;
import android.widget.LinearLayout;
public class flasher extends Activity {
/** Called when the activity is first created. */
LinearLayout llaLayout;
int a,b = 0;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
llaLayout = (LinearLayout)findViewById(R.id.layo);
for (int i=0;i<4;i++)
{
//SystemClock.sleep(2000);
//llaLayout.buildDrawingCache()
Thread.currentThread();
try
{
Thread.sleep(2000);
}
catch (Exception e)
{
e.notifyAll();
}
llaLayout.setBackgroundColor(Color.parseColor("#0000FF"));
//SystemClock.sleep(2000);
Thread.currentThread();
try
{
Thread.sleep(2000);
}
catch (Exception e)
{
e.notifyAll();
}
llaLayout.setBackgroundColor(Color.parseColor("#FF0000"));
// SystemClock.sleep(2000);
}
}
}
我只在布局中获得红色。
谢谢, SID
答案 0 :(得分:1)
您可以使用Handler
来实现此目的。
例如:
private boolean bool = true;
llaLayout = (LinearLayout)findViewById(R.id.layo);
final Handler mHandler = new Handler();
mHandler.postDelayed(new Runnable(){
@Override
public void run() {
mHandler.postDelayed(this, 1000);
changeColor();
}
private void changeColor() {
if (bool) {
llaLayout.setBackgroundColor(Color.RED);
bool = false;
} else {
llaLayout.setBackgroundColor(Color.BLUE);
bool = true;
}
}}, 1000);
此代码将递归调用相同的函数changeColor()
,其中1000是下次调用它的时间(以毫秒为单位)。
希望它有所帮助。
答案 1 :(得分:0)
你不能在主线程中阻止。这将立即使您的应用程序无响应。
您可以使用计时器或单独的线程来执行此操作。您只需确保在UI线程上执行与UI相关的实际功能(setBackgroundColor
)。为此,您可以使用Activity.runOnUiThread
。