Постоянно меняйте фон макета - PullRequest
0 голосов
/ 28 февраля 2011

Я делаю приложение, в котором я непрерывно меняю фон макета, как переворачивание фона, я реализую изменение фона с помощью функции Activity.runOnUiThread(), поскольку это функция пользовательского интерфейса, и жду 2 секунды с использованием Thread().sleep(), но приложение показывает только цвет макета, который я упомянул в конце.

package com.tutorial.flasher;

import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
//import android.os.SystemClock;
//import android.os.SystemClock;
import android.widget.LinearLayout;


public class flasher extends Activity {
    /** Called when the activity is first created. */
     LinearLayout llaLayout;
     Thread th = new Thread("ThreadOne");
     Activity _activity = new Activity();


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    llaLayout = (LinearLayout)findViewById(R.id.layo);



    Thread t1 = new Thread(new Runnable() {

        public void run() {
            try
            {
                Thread.sleep(2000);
            }
            catch (Exception e) {
                // TODO: handle exception
            }
        }
    });

    t1.start();
    t1.run();
    t1.stop();


     _activity.runOnUiThread(new Runnable(){
        public void run(){
            llaLayout.setBackgroundColor(Color.parseColor("#00FF00"));

        }
    });
    //t1.currentThread();
    t1.start();
  t1.run();
    t1.stop();

    _activity.runOnUiThread(new Runnable(){
        public void run(){
                                //Color BLUE of layout
            llaLayout.setBackgroundColor(Color.parseColor("#0000FF"));

        }
    });


}

}

И изменения пользовательского интерфейса, и запуск потока будут происходить в цикле (который не показан), но приложение меняет цвет макета только один раз. Спасибо, Sid

1 Ответ

3 голосов
/ 28 февраля 2011
  1. Вы не должны new Активность, Активность создается системой Android.
  2. Вызов Thread.start запустит поток, нет необходимости звонить Thread.run.

Activity.runOnUiThread возможно, не лучший способ архивировать это, попробуйте Handler,Вот пример кода:

public class BroadcastActivity extends Activity {

    public static final int CHANGE_BGCOLOR = 1;

    private LinearLayout llaLayout;

    private Handler handler = new Handler() {
        public void handleMessage(android.os.Message msg) {
            if (msg.what == 1) {
                String color = (String) msg.obj;
                llaLayout.setBackgroundColor(Color.parseColor(color));
                String nextColor = ""; // Next background color;
                Message m = obtainMessage(CHANGE_BGCOLOR, nextColor);
                sendMessageDelayed(m, 200);
            }
        }
    };

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        llaLayout = (LinearLayout)findViewById(R.id.layo);
        String nextColor = ""; // Next background color;
        Message m = handler.obtainMessage(CHANGE_BGCOLOR, nextColor);
        handler.sendMessageDelayed(m, 200);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...