在两种布局颜色之间反复翻转

时间:2011-02-26 00:53:20

标签: android android-layout

我正在开发一个应用程序,我试图在两种颜色的布局(线性布局)之间连续翻转,但颜色没有按预期变化。当我运行应用程序时,它等待,只有最后提到的颜色被更改,而且也只有一次,我怀疑一旦应用程序尝试更改颜色,布局就无法更改颜色,因此该应用只能更改一次颜色。

以下是代码

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

2 个答案:

答案 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