Android ImageButton - определить, какой ресурс установлен в данный момент - PullRequest
10 голосов
/ 30 июня 2010

Есть ли способ узнать, на какой ресурс установлен конкретный ImageButton, в любой момент времени?

Например: у меня есть ImageButton, который я установил на R.drawable.btn_on onCreate. Позже, в какой-то момент, ImageButton устанавливается на R.drawable.btn_off. Я хочу иметь возможность проверить, какой ресурс установлен для ImageButton в моем коде.

Спасибо Chris

Ответы [ 4 ]

15 голосов
/ 30 июня 2010

Просто используйте setTag() и getTag(), чтобы связать и извлечь пользовательские данные для вашего ImageView.

3 голосов
/ 30 июня 2010

Вы можете определить свой собственный класс как дочерний элемент ImageButton, добавить приватную переменную int и установить ее при вызове setImageResource(int).Что-то вроде:

public class MyImageButton extends ImageButton {

    private int mImageResource = 0;

    @Override
    public void setImageResource (int resId) {
        mImageResource = resId;
        super.setImageResource(resId);
    }

    public int getImageResource() {
        return mImageResource;
    }
}

Я не проверял это, но вы поняли - тогда вы можете вызвать getImageResource () для вашей кнопки, предполагая, что она была предварительно установлена ​​с помощью setImageResource ().

0 голосов
/ 06 марта 2013

Документация по документам для Android неверна. Здесь говорится, что pickDropPoint.getDrawableState()[android.R.attr.state_pressed] возвращает true или false, но вместо этого он возвращает 1 или 0, **int**.

Мне пришлось сделать следующее, чтобы это заработало

            <ImageButton
            android:id="@+id/pickDropPoint"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_weight="6"
            android:background="#EEeeeee4"
            android:contentDescription="pick or drop point"
            android:src="@drawable/pickupdrop" />

Drawable xml для ощущения нажатия

<?xml version="1.0" encoding="utf-8"?>

<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:src="@drawable/start32" android:state_pressed="true"/>
    <item android:src="@drawable/end32" android:state_pressed="false"/>
    <corners
        android:bottomLeftRadius="3dp"
        android:bottomRightRadius="3dp"
        android:topLeftRadius="3dp"
        android:topRightRadius="3dp" />

</selector>

В коде вам не нужен цикл for, как предлагает @slup

whichPoint = (pickDropPoint.getDrawableState()[android.R.attr.state_pressed] > 1 ? PICKUP : DROP);
0 голосов
/ 30 июня 2010

Я не знаю, как получить доступ к ресурсу напрямую, но для того, что вы пытаетесь достичь, разве недостаточно просто получить состояние?

    ImageButton btn = (ImageButton) findViewById(R.id.btn);

    int [] states = btn.getDrawableState();
    for (int i : states) {
        if (i == android.R.attr.state_pressed) {
            Log.v("btn", "Button in pressed state");
        }
    }

http://developer.android.com/reference/android/R.attr.html#state_pressed

...