在指定时间随机改变不同按钮的颜色

Posted

技术标签:

【中文标题】在指定时间随机改变不同按钮的颜色【英文标题】:change the colors of different buttons randomly at a specified time 【发布时间】:2016-03-25 11:21:51 【问题描述】:

我有 4 个不同的按钮。我想以某种随机模式在固定时间更改按钮的背景(比如 1 秒,即一个按钮改变它的颜色一秒然后保留它以前的颜色,然后另一个按钮做同样的事情,依此类推),然后用户将重复此模式。但是我无法随机更改按钮的背景。我知道将使用计时器或处理程序,但我不知道如何使用它。任何人都可以发布一个示例程序来展示如何随机更改按钮的背景?

这是我的 xml 文件: `

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_
android:layout_
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_
android:layout_
android:textStyle="bold"
android:textSize="50dp"
android:textColor="#FFFFFF"
android:text = "" />

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


<Button
android:layout_
android:layout_
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_
android:layout_
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_
android:layout_
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_
android:layout_
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;
    


`

【问题讨论】:

欢迎!你能提供你到目前为止的代码吗?谢谢! 我已经发布了我的代码,请看一下...... 如果条件做我想做的事,我到底应该写什么? 首先,您可能希望在for 循环的顶部重置之前button 的颜色,例如if(null != button) button.setBackgroundColor(Color.BLACK); 如果使用while(true) 循环,您可能想使用Thread.Sleep example here 将循环暂停设置的持续时间。 【参考方案1】:

您可以使用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)));

而且你必须采用其他方法。它将返回随机查看按钮。

【讨论】:

【参考方案2】:

你可以试试这样的:

    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[&lt;desired index&gt;].setBackgroundResource(&lt;color resource&gt;)更改背景颜色

要保留之前的颜色,可以使用ColorDrawable previousBackground = (ColorDrawable)changingButtons[&lt;desired index&gt;].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
            
    

这是我使用上述代码 on Ideone 制作的示例 希望这会为您指明正确的方向!

如需了解更多信息,请查看:Changing the background color programmatically、Getting the background color、Java Timer documentation

【讨论】:

我已经发布了我的代码,你能看看我的代码吗...? 能否提供TimerTask中颜色切换的代码? 更新了一个例子。您将使用与您当前在代码中使用的相同的按钮颜色更改语法。

以上是关于在指定时间随机改变不同按钮的颜色的主要内容,如果未能解决你的问题,请参考以下文章

HTML中如何改变按钮的颜色

如何在 UITableView 中为不同的单元格和标题设置不同的随机颜色?

android studio中的按钮颜色不会改变

如何避免 UIToolbar 的 tintColor 改变 UIButtonItem 按钮颜色?

Axure8.0 按钮选中时改变颜色和文字

检测精灵的颜色