Android ImageButton-определите, какой ресурс установлен в данный момент
есть ли способ найти, на какой ресурс установлен конкретный ImageButton в любой момент времени?
например: у меня есть ImageButton, который я установил в R.drawable.btn_on
onCreate. Позже, в какой-то момент, ImageButton получает значение R.drawable.btn_off
. Я хочу иметь возможность проверить, какой ресурс установлен ImageButton в моем коде.
спасибо Крис!--3-->
4 ответов
просто использовать 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
, an **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 для нажатия feel
<?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);