Ответ 1
Просто используйте setTag()
и getTag()
для связи и получения пользовательских данных для ImageView
.
Есть ли способ определить, к какому ресурсу задан определенный ImageButton в любой момент времени?
Например, у меня есть ImageButton, который я установил в R.drawable.btn_on
onCreate. Позже, в какой-то момент, ImageButton получает значение R.drawable.btn_off
. Я хочу иметь возможность проверить, какой ресурс установлен в ImageButton в моем коде.
Спасибо Крис
Просто используйте setTag()
и getTag()
для связи и получения пользовательских данных для ImageView
.
Вы можете определить свой собственный класс как дочерний элемент 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().
Я не знаю, как получить доступ к ресурсу напрямую, но для чего вы пытаетесь достичь, не достаточно ли просто получить состояние?
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
Неверная документация по андроидным документам. Здесь он указывает, что pickDropPoint.getDrawableState()[android.R.attr.state_pressed]
возвращает true
или false
, но вместо этого возвращает 1
или 0
, a **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" />
Выбираемый 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);