2013-03-08 3 views
0

Я начинающий андроид, с некоторыми java под моим поясом. Я закончил только мой первый учебник по приложению.Сделать цвет экрана смены экрана один раз в секунду

Далее я хочу сделать приложение, чтобы использовать простые 2D-графики

Для начала, я хочу найти способ мерцания экрана между двумя цветами (красный и зеленый) в бесконечном цикле

wait int seconds; 
make screen red; 
wait int seconds; 
make screen green; 

loop forever; 

Может ли кто-нибудь указать мне учебник (ы) или исходный код (ы), который может помочь?

Большое спасибо

+0

developer.android.com? или Google? Пожалуйста, прочтите FAQ. – KevinDTimm

ответ

3

Спасибо за вход, Этот код, кажется, работает нормально

package biz.consett.mydraw; 

import android.app.Activity; 
import android.graphics.Color; 
import android.os.Bundle; 
import android.view.View; 

/* Flash the screen between red and green each second */ 
public class MainActivity extends Activity { 
    final static int INTERVAL = 1000; // 1000=1sec 
    private static View myView = null; 
    boolean whichColor = true; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     myView = (View) findViewById(R.id.my_view); 
     myView.setBackgroundColor(Color.RED);// set initial colour 
     new Thread(new Runnable() { 
      public void run() { 
       while (true) { 
        try { 
         Thread.sleep(INTERVAL); 
        } 
        catch (InterruptedException e) { 
         e.printStackTrace(); 
        } 
        updateColor(); 
        whichColor = !whichColor; 
       } 
      } 
     }).start(); 
    } 

    private void updateColor() { 
     runOnUiThread(new Runnable() { 
      @Override 
      public void run() { 
       if (whichColor) 
        myView.setBackgroundColor(Color.RED); 
       else 
        myView.setBackgroundColor(Color.GREEN); 
      } 
     }); 
    } 
} 

Layout, activity_main.xml:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent"> 

<View 

android:id="@+id/my_view" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent"> 

</View> 

</RelativeLayout> 
0

Взятые из this поста и отредактированы для Вашего случая:

private int m_interval = 1000; // 1 second by default, can be changed later 
private Handler m_handler; 
private Layout mYourMainLayout //dont know what type of layout you use 
private boolean which; 

@Override 
protected void onCreate(Bundle bundle) 
{ 
    ... 
    mYourMainLayout = (Layout) this.findViewById(R.id.yourMainLayout); 
    m_handler = new Handler(); 
} 

Runnable m_colorChanger = new Runnable() 
{ 
    @Override 
    public void run() { 
if(which){ 
     mYourMainLayout.setBackgroundColor(Color.GREEN) 
     } 
else { 
    mYourMainLayout.setBackgroundColor(Color.RED) 
    } 
which=!which 
      m_handler.postDelayed(m_colorChanger, m_interval); 
    } 
}; 
+0

Спасибо за быстрый ответ. –

+0

'защищен недействительным OnCreate (Bundle пучок) \t { TAG_BR пространство пространство \t \t \t mYourMainLayout = (RelativeLayout) this.findViewById (R.id.flashscreen); \t m_handler = new Handler(); \t} \t Runnable m_colorChanger = новый Runnable() { \t \t @Override \t общественного недействительными запуска() { \t, если (который) { \t mYourMainLayout.setBackgroundColor (Color.GREEN); \t} \t else { \t mYourMainLayout.setBackgroundColor (Color.RED); \t} \t который =! Который; \t m_handler.postDelayed (m_colorChanger, m_interval); \t} \t}; '** компилируется, но приложение просто останавливается во время выполнения **. –

+0

oops глупая ошибка забыла 'super.onCreate (bundle);' ***, но теперь только показывает серый экран - не мигает красный/зеленый *** –

2

Как насчет сделать макет, который заполняет экран, назовём его llayout.

положить это в коде:

static final int[] COLORS = {0xff0000, 0x00ff00}; 
static final int WAITTIME = 1000; 
int currentColor = 0; 

public void onCreate(Bundle b) { 
    setContentView(R.layout.mylayout); 
    final LinearLayout llayout = (LinearLayout) findViewById(R.id.llayout); 
    new Thread() { 
     public void run() { 
      while(true) { 
       Thread.sleep(WAITTIME); 
       currentColor++; 
       if (currentColor > COLORS.length) 
        currentColor = 0; 
       YourActivity.this.runOnUiThread(new Runnable() { 
        public void run() { 
         llayout.setBackgroundColor(COLORS[currentColor]); 
        } 
       }); 
      } 
     } 
    }.start(); 
} 

Это должно работать. Используя этот код, вы можете добавить дополнительные цвета в массив COLORS.

0

Вы уже получили много решений, но просто добавить мой собственный ...

Вам понадобится таймер

@Override 
protected void onCreate(Bundle bundle) 
{ 
    ... 
    Timer timer = new Timer(); 
    TimerTask updateColor = new SwitchColorTask(); 
    timer.scheduleAtFixedRate(updateColor, 100, 100); 
    ... 
} 

Задача таймера.

private boolean colorSwitched; 
class SwitchColorTask extends TimerTask { 
    public void run() { 
     LinearLayout main = (LinearLayout)findViewById(R.id.main); 
     if(colorSwitched){ 
      main.setBackgroundColor (Color.GREEN) 
     } 
     else{ 
      main.setBackgroundColor (Color.RED) 
     }   
     colorSwitched=!colorSwitched 
    } 
} 
+0

извините за плохое форматирование –

0

Этот код реализует множество цветов и отлично работает - большое спасибо.
(использует тот же манифест и макет) package biz.consett.mydraw;

import android.app.Activity; 
import android.graphics.Color; 
import android.os.Bundle; 
import android.view.View; 

/* 
* Simple use of Android Thread 
* Flash the screen between an array of colours at an interval 
* 
*/ 

public class MainActivity extends Activity 


static final int[] COLORS = 
{AColor.RED, AColor.BLUE, AColor.GREEN};// colour array 
// Colour Red Green Blue 
// Index [0] [1] [2] 

private int currentColor = 0; 

private View MYVIEW = null; 
//boolean whichColor = true; 

final int interval = 100; // 0.6 second static final? 

@Override 
public void onCreate(Bundle savedInstanceState) 
{ 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    MYVIEW = (View) findViewById(R.id.my_view); 

    MYVIEW.setBackgroundColor(Color.RED);// set initial colour 

    new Thread(new Runnable() 
    { 

     // @Override 
     public void run() 
     { 

      while (true) 
      { 
       try 
       { 
        Thread.sleep(interval); // sleep for interval 

       } 

       catch (InterruptedException e) 
       { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 

        updateColor(); 

      } // end of while true loop 


     }// end of run 

    }).start(); // end of runnable 

} // end of onCreate bundle 

private void updateColor() 
{ 

    runOnUiThread(new Runnable() 
    { 

     @Override 
     public void run() 
     { 

      if (currentColor > COLORS.length - 1) 
      { 
       currentColor = 0; 

      } 
      MYVIEW.setBackgroundColor(COLORS[currentColor]); 

      currentColor++; 

     }// end of run 
    }); 

} 
}// -------------END OF MainActivity extends Activity----------------------- 

package biz.consett.mydraw; 

public class AColor 
{ 

final static int RED = 0xFFFF0000; // hex alpha_R_G_B 
final static int GREEN = 0xFF00FF00; 
final static int BLUE = 0xFF0000FF; 
final static int PURPLE = 0xFFAA00AA; 
} 
Смежные вопросы