Почему setAlpha () действует на все мои кнопки, а setImageResource () действует только на одну кнопку? - PullRequest
0 голосов
/ 06 ноября 2011

В данный момент мои кнопки не работают. При первых двух нажатиях на все кнопки влияют, а не только те, которые были нажаты.

Своп:

seatButton[i].setAlpha(255);

Для:

seatButton[i].setImageResource(0x7f020007)

И мой код работает! Действует только кнопка, которую я нажимаю. Почему?

@Override
public void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    table = new Table(); //Creates Table
    seatButton = new ImageButton[10]; //Creates Array of buttons
    seatStats = new TextView[10]; //Creates array for stat panels


    //Creates longClickListener, used for players to sit in or out.
    longClickListener = new View.OnLongClickListener() 


    {


        @Override
        public boolean onLongClick(View v) 
        {
            for(int i=0; i<10; i++)
            {
                //Each seat[i] will correspond with each imageButtoni+1
                if(v.getId() == (getResources().getIdentifier("imageButton" + (i+1), "id", "en.deco.android.livehud"))) 
                {
                    //If the seat is empty fill it, place a player in the seat and change the button from translucent to opaque
                    if(table.seats[i].getState().equals("empty"))
                    {

                        seatButton[i].setAlpha(255);
                        //seatButton[i].setImageResource(0x7f020000);
                        table.seats[i].sit(new Player());
                        seatStats[i].setVisibility(View.VISIBLE);
                        Toast.makeText(GUI.this, table.seats[i].getState(), Toast.LENGTH_SHORT).show();
                    }
                    //If the seat is full, empty it
                    else
                    {
                        seatButton[i].setAlpha(80);
                        //seatButton[i].setImageResource(0x7f020007);
                        table.seats[i].sitOut();
                        seatStats[i].setVisibility(View.INVISIBLE);
                        Toast.makeText(GUI.this, table.seats[i].getState() + i, Toast.LENGTH_SHORT).show();
                    }
                }
            }
            return true;
        }
    };


    //Assigns the buttons and stats panels defined in the layout xml to their appropiate java arrays. Also sets clickListeners to buttons.
    for(int i = 0; i < 10; i++)
    {
        seatButton[i] = (ImageButton) findViewById(getResources().getIdentifier("imageButton" + (i+1), "id", "en.deco.android.livehud"));
        seatStats[i] = (TextView) findViewById(getResources().getIdentifier("textView" + (i+1), "id", "en.deco.android.livehud"));
        seatButton[i].setOnLongClickListener(longClickListener);
        seatButton[i].setAlpha(80);
    }

Ответы [ 2 ]

1 голос
/ 06 ноября 2011

Вы проводите сравнение строк с ==, что означает, что вы сравниваете ссылки, а не значения.Это, вероятно, не то, что вы хотите, поэтому вы должны изменить это значение с:

if(table.seats[i].getState() == "empty") { ... }

на:

if(table.seats[i].getState().equals("empty")) { ... }

Кроме того, в соответствии с документацией setAlpha(float alpha) (которая являетсяМетод API 11, только для справки), переданное значение с плавающей точкой должно быть между [0...1].

Ресурс изображения, который вы устанавливаете, - это R.id.transparent_background ImageManager.Это может означать, что ваша логика работает, но ошибка действительно где-то в установке альфа-значения.

0 голосов
/ 06 ноября 2011

Я нашел решение, но не понимаю его и не доволен им. Я установил альфа-анимацию, которая меняла значение альфа на всех моих кнопках с 255 до 255 при открытии моей программы. Другими словами это ничего не делает. Однако моя программа сейчас работает. Я бы приветствовал лучшее решение или объяснение, почему это работает?

Этот код помещается вместе с остальными инициализациями в начало метода onCreate (). Он устанавливает AlphaAnimation, которые остаются на том же значении.

//Initializes AlphaAnimations to alter transparency
alphaDown = new AlphaAnimation(1f, 1f); 
alphaDown.setDuration(1000);
alphaDown.setFillAfter(true);

Это тот же цикл, показанный внизу моего вопроса с одной измененной строкой. Он активирует эту стационарную анимацию перед установкой всех моих кнопок как полупрозрачных. Без этой анимации все кнопки затрагиваются одним щелчком мыши. С анимацией каждая кнопка реагирует, когда на нее нажимают и только на нее.

        //Assigns the buttons and stats panels defined in the layout xml to their appropiate java arrays. Also sets clickListeners to buttons.
    for(int i = 0; i < 10; i++)
    {
        seatButton[i] = (ImageButton) findViewById(getResources().getIdentifier("imageButton" + (i+1), "id", "en.deco.android.livehud"));
        seatStats[i] = (TextView) findViewById(getResources().getIdentifier("textView" + (i+1), "id", "en.deco.android.livehud"));
        seatButton[i].setOnLongClickListener(longClickListener);
        seatButton[i].startAnimation(alphaDown);
        seatButton[i].setAlpha(80);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...