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



我有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;
    }
}

}`

你可以试试这样的东西:

    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
            }
    }

这是我在Ideone上使用上述代码制作的一个示例希望这能为你指明正确的方向!

有关更多信息,请查看以下内容:以编程方式更改背景色、获取背景色、Java Timer文档

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

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

最新更新