Android 尝试使用if语句更改按钮背景

Android 尝试使用if语句更改按钮背景,android,button,if-statement,Android,Button,If Statement,试图创造一个孩子们追逐大理石的游戏。我想有按钮的背景变化,只有当另一个按钮的背景相等的东西。但不能让带有if语句的onclick工作。这是我目前拥有的代码 package test.tablet.design; import java.text.DateFormat; import java.util.Date; import android.app.Activity; import android.os.Bundle; import android.view.View; import and

试图创造一个孩子们追逐大理石的游戏。我想有按钮的背景变化,只有当另一个按钮的背景相等的东西。但不能让带有if语句的onclick工作。这是我目前拥有的代码

package test.tablet.design;

import java.text.DateFormat;
import java.util.Date;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class MarbleGame extends Activity {

private Button btnA1mc; private Button btnA2mc; private Button btnA3mc; private Button btnA4mc; private Button btnB1mc; private Button btnB2mc; private Button btnB3mc; private Button btnB4mc;
private Button btnC1mc; private Button btnC2mc; private Button btnC3mc; private Button btnC4mc; private Button btnD1mc; private Button btnD2mc; private Button btnD3mc; private Button btnD4mc;
private Button btnE1mc; private Button btnE2mc; private Button btnE3mc; private Button btnE4mc; private Button btnF1mc; private Button btnF2mc; private Button btnF3mc; private Button btnF4mc;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.marble_chase);
    TextView tv_time = (TextView) findViewById(R.id.tv_time);
    String currenttime = DateFormat.getDateTimeInstance().format(new Date());
    tv_time.setText(currenttime);

    btnA1mc = (Button)findViewById(R.id.btnA1mc); btnA2mc = (Button)findViewById(R.id.btnA2mc); btnA3mc = (Button)findViewById(R.id.btnA3mc); btnA4mc = (Button)findViewById(R.id.btnA4mc);
    btnB1mc = (Button)findViewById(R.id.btnB1mc); btnB2mc = (Button)findViewById(R.id.btnB2mc); btnB3mc = (Button)findViewById(R.id.btnB3mc); btnB4mc = (Button)findViewById(R.id.btnB4mc);
    btnC1mc = (Button)findViewById(R.id.btnC1mc); btnC2mc = (Button)findViewById(R.id.btnC2mc); btnC3mc = (Button)findViewById(R.id.btnC3mc); btnC4mc = (Button)findViewById(R.id.btnC4mc);
    btnD1mc = (Button)findViewById(R.id.btnD1mc); btnD2mc = (Button)findViewById(R.id.btnD2mc); btnD3mc = (Button)findViewById(R.id.btnD3mc); btnD4mc = (Button)findViewById(R.id.btnD4mc);
    btnE1mc = (Button)findViewById(R.id.btnE1mc); btnE2mc = (Button)findViewById(R.id.btnE2mc); btnE3mc = (Button)findViewById(R.id.btnE3mc); btnE4mc = (Button)findViewById(R.id.btnE4mc);
    btnF1mc = (Button)findViewById(R.id.btnF1mc); btnF2mc = (Button)findViewById(R.id.btnF2mc); btnF3mc =    (Button)findViewById(R.id.btnF3mc); btnF4mc = (Button)findViewById(R.id.btnF4mc);

    btnE2mc.setOnClickListener(new OnClickListener()
      {
          @Override
          public void onClick(View v)
          {
              btnE2mc.setBackgroundResource(R.drawable.marble_x);
              btnB4mc.setBackgroundResource(R.drawable.marble);
          }
      });
    btnB4mc.setOnClickListener(new OnClickListener()
    {
        @Override
        public void onClick(View v)
        {
            if (btnE2mc.equals(getResources().getDrawable(R.drawable.marble_x)))
            {
            btnB4mc.setBackgroundResource(R.drawable.marble_x);
            btnC1mc.setBackgroundResource(R.drawable.marble);
            }
            else{}
        }
    });
    btnC1mc.setOnClickListener(new OnClickListener()
    {
        @Override
        public void onClick(View v)
        {
            if (btnB4mc.equals(getResources().getDrawable(R.drawable.marble_x)))
            {
            btnC1mc.setBackgroundResource(R.drawable.marble_x);
            btnF1mc.setBackgroundResource(R.drawable.marble);
            }
            else{}
        }
    });
}

}
每当单击按钮并且更改背景时,我会将内部布尔值设置为true

boolean isBackgroundChanged = false;
无论何时单击按钮,都会更改背景并将isBackgroundChanged设置为true。 然后,与其做:

btnB4mc.equals(getResources().getDrawable(R.drawable.marble_x)
你会的

if(isBackgroundChanged)...

您试图将Button对象与可绘制对象进行比较,该对象将始终返回false

您可能希望使用View.setTag来跟踪每个按钮的状态。使用命名或未命名的标记,可以将任意数据与单个视图关联。在下面的示例中,自动装箱用于将布尔值转换为布尔值

if ((Boolean)btn1.getTag()) {
  btn1.setTag(false);
  btn2.setTag(true);
  // TODO actual background swapping
}

为了可读性和减少重复,您可能希望使用一个可以为您进行交换的助手函数,该函数将使用两个按钮作为参数。

那么您正在根据绘制的图片跟踪大理石的位置?跟踪大理石当前和以前的位置作为坐标,然后根据这些信息绘制,不是更容易吗?找到了另一种方法,谢谢你们的帮助。你能用我的代码解释一下吗,还在学习android。如果我看到工作代码,我可以理解它。