2015-12-18 2 views
2

У меня есть 4 разных кнопки. Я хочу изменить фон кнопок в фиксированное время (скажем, 1 с, т. Е. Одна кнопка меняет цвет на одну секунду, а затем сохраняет свой предыдущий цвет, а затем другую кнопку делает то же самое и так далее) в определенном случайном шаблоне, а затем пользователь повторит этот шаблон. Однако я не могу случайно изменить фон кнопок. Я знаю, что таймер или обработчик будут использоваться, но я не знаю, как его использовать. Может ли кто-нибудь отправить примерную программу, которая показывает, как изменить фон кнопок в случайном порядке?изменить цвета различных кнопок в случайном порядке в указанное время

вот мой XML-файл: `

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:background="@drawable/background" 
android:paddingBottom="@dimen/activity_vertical_margin" 
android:paddingLeft="@dimen/activity_horizontal_margin" 
android:paddingRight="@dimen/activity_horizontal_margin" 
android:paddingTop="@dimen/activity_vertical_margin" 
> 


<TextView 
android:id="@+id/levelText" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:textStyle="bold" 
android:textSize="50dp" 
android:textColor="#FFFFFF" 
android:text = "" /> 

<TextView 
android:id="@+id/countDnText" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_centerHorizontal="true" 
android:layout_centerVertical="true" 
android:textSize="100dp" 
android:textStyle="bold" 
android:textColor="#FFFFFF" 
android:text="" 
/> 


<Button 
android:layout_width="160dp" 
android:layout_height="200dp" 
android:background="#000000" 
android:id="@+id/button5" 
android:layout_alignParentTop="true" 
android:layout_alignParentLeft="true" 
android:layout_alignParentStart="true" 
android:layout_marginTop="79dp" /> 

<Button 
android:layout_width="160dp" 
android:layout_height="200dp" 
android:background="#000000" 
android:id="@+id/button6" 
android:layout_alignTop="@+id/button5" 
android:layout_alignParentRight="true" 
android:layout_alignParentEnd="true" 
/> 

<Button 
style="?android:attr/buttonStyleSmall" 
android:layout_width="160dp" 
android:layout_height="200dp" 
android:background="#000000" 
android:id="@+id/button7" 
android:layout_below="@+id/button5" 
android:layout_alignParentLeft="true" 
android:layout_alignParentStart="true" 
android:layout_marginTop="10dp" /> 

<Button 
android:layout_width="160dp" 
android:layout_height="200dp" 
android:background="#000000" 
android:id="@+id/button8" 
android:layout_alignTop="@+id/button7" 
android:layout_alignParentRight="true" 
android:layout_alignParentEnd="true" /> 

</RelativeLayout> 

`

вот моя активность: `

import android.graphics.Color; 
import android.os.Bundle; 
import android.os.Handler; 
import android.support.v7.app.AppCompatActivity; 
import android.view.View; 
import android.widget.Button; 
import android.widget.TextView; 

import java.util.Random; 
import java.util.Timer; 
import java.util.TimerTask; 

public class EasyGameActivity extends AppCompatActivity 
{ 

private int counter; 
private TextView text; 
private boolean flag = false; 
private Button button = null; 
private int i; 

@Override 
protected void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_easy_game); 

    startGame(); 
} 

public void startGame() 
{ 
    counter = 3; 
    int temp; 

    final Random rand = new Random(); 
    Handler handler = new Handler(); 


    while(true) 
    { 
     BinaryTree binaryTree = new BinaryTree(counter); 


     for(int i = 0; i<counter; ++i) 
     { 
      temp = rand.nextInt(3); 

      // yellow color button... 
      if(temp == 0) 
      { 
       button = (Button) findViewById(R.id.button5); 
       button.setBackgroundColor(Color.YELLOW); 

      } 


      else if(temp == 1) 
      { 
       button = (Button) findViewById(R.id.button6); 
       button.setBackgroundColor(Color.BLUE); 

      } 

      else if(temp == 2) 
      { 
       button = (Button) findViewById(R.id.button7); 
       button.setBackgroundColor(Color.RED); 
      } 


      else if(temp == 3) 
      { 
       button = (Button) findViewById(R.id.button8); 
       button.setBackgroundColor(Color.GREEN); 
      } 


      //button.setBackgroundColor(Color.BLACK); 

     } 
     break; 
    } 

} 

}`

+0

Добро пожаловать !!! Не могли бы вы предоставить код, который у вас есть? Благодаря! –

+0

Я разместил свой код, пожалуйста, взгляните ... – Muzahir

+0

Что именно я должен писать в тех случаях, когда мне нужно делать то, что я хочу? – Muzahir

ответ

0

Вы могли бы попробовать что-то вроде этого :

Button[] changingButtons = new Button[4]; 
    changingButtons[0] = (Button)findViewById(R.id.button1_id); 
    changingButtons[1] = (Button)findViewById(R.id.button2_id); 
    changingButtons[2] = (Button)findViewById(R.id.button3_id); 
    changingButtons[3] = (Button)findViewById(R.id.button4_id); 

Вы можете получить доступ к соответствующей кнопке в массиве и изменить цвет фона с помощью changingButtons[<desired index>].setBackgroundResource(<color resource>)

Чтобы сохранить прежний цвет, вы можете использовать ColorDrawable previousBackground = (ColorDrawable)changingButtons[<desired index>].getBackground();

Тогда для «установить время» часть , используйте таймер и выполните переключение цвета в TimerTask.

Если вы хотите использовать TimerTask будет выглядеть примерно так внутри метода, назвав его:

timer = new Timer(); 
    timer.schedule(new MyTask(buttonNumber), numMilliseconds); 

И тогда MyTask будет класс расширение TimeTask

class MyTask extends TimerTask 
    { 
      private int buttonId; 
      public MyTask(int buttonId) 
      { 
        super(); 
        this.buttonId = buttonId; 
      } 
      public void run() 
      { 
        //Do your button alterations here 
      } 
    } 

Вот пример I сделанный с использованием вышеуказанного кода on Ideone Надеюсь, это указывает на то, что вы в правильном направлении!

Для получения дополнительной информации, ознакомьтесь с этим: Changing the background color programmatically, Getting the background color, Java Timer documentation

+0

Я разместил свой код, не так ли, пожалуйста, взгляните на мой код ...? – Muzahir

+0

Можно ли указать код переключения цвета в TimerTask? – Muzahir

+0

Обновлено с примером. Вы должны использовать тот же синтаксис изменения цвета кнопки, который вы используете в своем коде. –

0

Вы можете использовать Collections.shuffle(colorList);

List<String> colorList=new ArrayList<>(); 
colorList.add("#108E44"); 
colorList.add("#000000ff"); 
colorList.add("#108E44"); 
for() { 
    giveMeButtons(i).setBackgorundColor(Color.parseColor(colorList.get(i))); 
} 

И вы должны сделать другой метод. Он вернет случайную кнопку «Просмотр».

Смежные вопросы