gpt4 book ai didi

java - 如何匹配两个按钮的背景

转载 作者:行者123 更新时间:2023-11-30 09:21:43 25 4
gpt4 key购买 nike

大家好,我是编程新手,我知道这个问题可能有一些简单的答案,但还不太明白。

所以基本上我想知道两个按钮的背景图像是否匹配以及它们是否确实禁用了它们(或其他一些功能)。这是我的代码,目前我专注于 Button1 和 Button2。

看看结束方法,我知道这是否行得通,但这就是我想要做的。谢谢。

package com.example.pairsgame;

import android.os.Bundle;
import android.os.CountDownTimer;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends Activity implements OnClickListener {

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


public final static int Button_Count = 12;

private Button[] Buttons = new Button[Button_Count];
{

Buttons[0] = (Button) findViewById(R.id.Button1);
Buttons[1] = (Button) findViewById(R.id.Button2);
Buttons[2] = (Button) findViewById(R.id.Button3);
Buttons[3] = (Button) findViewById(R.id.Button4);
Buttons[4] = (Button) findViewById(R.id.Button5);
Buttons[5] = (Button) findViewById(R.id.Button6);
Buttons[6] = (Button) findViewById(R.id.Button7);
Buttons[7] = (Button) findViewById(R.id.Button8);
Buttons[8] = (Button) findViewById(R.id.Button9);
Buttons[9] = (Button) findViewById(R.id.Button10);
Buttons[10] = (Button) findViewById(R.id.Button11);
Buttons[11] = (Button) findViewById(R.id.Button12);

Buttons[0].setOnClickListener(this);
Buttons[1].setOnClickListener(this);
Buttons[2].setOnClickListener(this);
Buttons[3].setOnClickListener(this);
Buttons[4].setOnClickListener(this);
Buttons[5].setOnClickListener(this);
Buttons[6].setOnClickListener(this);
Buttons[7].setOnClickListener(this);
Buttons[8].setOnClickListener(this);
Buttons[9].setOnClickListener(this);
Buttons[10].setOnClickListener(this);
Buttons[11].setOnClickListener(this);

}

public static int Background_Total = 8;

public final static int[] Backgrounds = { R.drawable.ic_launcher };

public final static int[] Game_Board = {

0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5 };

@Override
public void onClick(View v) {

for (final int but = 0; but < Button_Count; but++) {
if (v == Buttons[but]) {
new CountDownTimer(1000, 500) {

public void onTick(long millisUntilFinished) {
Buttons[but].setBackgroundResource(Backgrounds[Game_Board[but]]);
}

public void onFinish() {
Buttons[but].setBackgroundResource(android.R.drawable.btn_default);
}
}.start();
if (Game_Board[0] == Game_Board[2])
Buttons[0].setEnabled(false);
Buttons[2].setEnabled(false);
}
}

}
}

最佳答案

您通常希望将数据与其表示分开。这有很多明显的好处,其中之一就是可以轻松测试数据,而不必担心数据的可视化表示。

首先,您需要将按钮存储在一个数组中,如下所示:

public final static int BUTTON_COUNT = 12; 

private Button[] buttons = new Button[BUTTON_COUNT];

Button[0] = (Button)findViewById( R.id.Button1 ); // Button 1
Button[1] = (Button)findViewById( R.id.Button2 ); // Button 2
Button[2] = (Button)findViewById( R.id.Button3 ); // Button 3
Button[3] = (Button)findViewById( R.id.Button4 ); // Button 4
Button[4] = (Button)findViewById( R.id.Button5 ); // Button 5
Button[5] = (Button)findViewById( R.id.Button6 ); // Button 6
Button[6] = (Button)findViewById( R.id.Button7 ); // Button 7
Button[7] = (Button)findViewById( R.id.Button8 ); // Button 8
Button[8] = (Button)findViewById( R.id.Button9 ); // Button 9
Button[9] = (Button)findViewById( R.id.Button10 ); // Button 10
Button[10] = (Button)findViewById( R.id.Button11 ); // Button 11
Button[11] = (Button)findViewById( R.id.Button12 ); // Button 12

这将大大增强您使用它们的方式,正如您将在 onClick() 中看到的那样。

接下来您需要定义您想要多少个独特的背景,以及代表每个背景的图像:

public final static int BACKGROUND_TOTAL = 8;

public final static int[] BACKGROUNDS = {
R.drawable.ic_launcher, // Image 0
R.drawable.ic_launcher2, // Image 1
R.drawable.ic_launcher3, // Image 2
R.drawable.ic_launcher4, // Image 3
R.drawable.ic_launcher5, // Image 4
R.drawable.ic_launcher6, // Image 5
R.drawable.ic_launcher7, // Image 6
R.drawable.ic_launcher8 // Image 7
};

您还需要定义“游戏板”的外观。这将做的是将图像与每个按钮“关联”。这可以通过一百万种不同的方式完成,但作为示例,让我们使用固定数组。请注意,这些条目中的每一个都将与您的一个按钮相匹配:

 public final static int[] GAME_BOARD = {
0, // Button 1
0, // Button 2
1, // Button 3
1, // Button 4
2, // Button 5
2, // Button 6
3, // Button 7
3, // Button 8
4, // Button 9
4, // Button 10
5, // Button 11
5, // Button 12
};

这里的每个值都是背景数组中的一个“索引”。因此所有值都必须介于 0 和 (BACKGROUND_TOTAL-1) 之间。请注意,我只是添加了顺序对,但显然对于真正的游戏,您需要在此处生成随机值。在上面的示例中,按钮 3 将使用图像 1,按钮 9 将使用图像 4,依此类推。

有了所有这些信息,这就是您的 onClick 的样子:

@Override
public void onClick(View v) {

if ( v == buttons[0] ) {
new CountDownTimer(1000, 500) {
public void onTick(long millisUntilFinished) {
buttons[0].setBackgroundResource( BACKGROUNDS[GAME_BOARD[0]] );
}

public void onFinish() {
buttons[0].setBackgroundResource( android.R.drawable.btn_default );
}
}.start();
}
if ( v == buttons[1] ) {
new CountDownTimer(1000, 500) {
public void onTick(long millisUntilFinished) {
buttons[1].setBackgroundResource( BACKGROUNDS[GAME_BOARD[1]] );
}

public void onFinish() {
buttons[1].setBackgroundResource( android.R.drawable.btn_default );
}
}.start();
}
if ( v == buttons[2] ) {
new CountDownTimer(1000, 500) {
public void onTick(long millisUntilFinished) {
buttons[2].setBackgroundResource( BACKGROUNDS[GAME_BOARD[2]] );
}

public void onFinish() {
buttons[2].setBackgroundResource( android.R.drawable.btn_default );
}
}.start();
}
if ( v == buttons[3] ) {
new CountDownTimer(1000, 500) {
public void onTick(long millisUntilFinished) {
buttons[3].setBackgroundResource( BACKGROUNDS[GAME_BOARD[0]] );
}

public void onFinish() {
buttons[3].setBackgroundResource( android.R.drawable.btn_default );
}
}.start();
}
if ( v == buttons[4] ) {
new CountDownTimer(1000, 500) {
public void onTick(long millisUntilFinished) {
buttons[4].setBackgroundResource( BACKGROUNDS[GAME_BOARD[4]] );
}

public void onFinish() {
buttons[4].setBackgroundResource( android.R.drawable.btn_default );
}
}.start();
}
if ( v == buttons[5] ) {
new CountDownTimer(1000, 500) {
public void onTick(long millisUntilFinished) {
buttons[5].setBackgroundResource( BACKGROUNDS[GAME_BOARD[5]] );
}

public void onFinish() {
buttons[5].setBackgroundResource( android.R.drawable.btn_default );
}
}.start();
}
if ( v == buttons[6] ) {
new CountDownTimer(1000, 500) {
public void onTick(long millisUntilFinished) {
buttons[6].setBackgroundResource( BACKGROUNDS[GAME_BOARD[6]] );
}

public void onFinish() {
buttons[6].setBackgroundResource( android.R.drawable.btn_default );
}
}.start();
}
if ( v == buttons[7] ) {
new CountDownTimer(1000, 500) {
public void onTick(long millisUntilFinished) {
buttons[7].setBackgroundResource( BACKGROUNDS[GAME_BOARD[7]] );
}

public void onFinish() {
buttons[7].setBackgroundResource( android.R.drawable.btn_default );
}
}.start();
}
if ( v == buttons[8] ) {
new CountDownTimer(1000, 500) {
public void onTick(long millisUntilFinished) {
buttons[8].setBackgroundResource( BACKGROUNDS[GAME_BOARD[8]] );
}

public void onFinish() {
buttons[8].setBackgroundResource( android.R.drawable.btn_default );
}
}.start();
}
if ( v == buttons[9] ) {
new CountDownTimer(1000, 500) {
public void onTick(long millisUntilFinished) {
buttons[9].setBackgroundResource( BACKGROUNDS[GAME_BOARD[9]] );
}

public void onFinish() {
buttons[9].setBackgroundResource( android.R.drawable.btn_default );
}
}.start();
}
if ( v == buttons[10] ) {
new CountDownTimer(1000, 500) {
public void onTick(long millisUntilFinished) {
buttons[10].setBackgroundResource( BACKGROUNDS[GAME_BOARD[10]] );
}

public void onFinish() {
buttons[10].setBackgroundResource( android.R.drawable.btn_default );
}
}.start();
}
if ( v == buttons[11] ) {
new CountDownTimer(1000, 500) {
public void onTick(long millisUntilFinished) {
buttons[11].setBackgroundResource( BACKGROUNDS[GAME_BOARD[11]] );
}

public void onFinish() {
buttons[11].setBackgroundResource( android.R.drawable.btn_default );
}
}.start();
}
if ( v == buttons[12] ) {
new CountDownTimer(1000, 500) {
public void onTick(long millisUntilFinished) {
buttons[12].setBackgroundResource( BACKGROUNDS[GAME_BOARD[12]] );
}

public void onFinish() {
buttons[12].setBackgroundResource( android.R.drawable.btn_default );
}
}.start();
}
}

最后,除了匹配图像之外,您还可以简单地使用以下内容来测试两个按钮具有相同的背景:

if ( GAME_BOARD[button1] == GAME_BOARD[button2] )
// disable both buttons

在这种情况下,button1 和 button2 应该是按钮在其数组中的索引值。

虽然这是一个粗略的例子,但它应该能让您以不同的、更合适的方式思考问题。祝你好运!

关于java - 如何匹配两个按钮的背景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16817525/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com