Освой Android играючи
/* Моя кошка замечательно разбирается в программировании. Стоит мне объяснить проблему ей - и все становится ясно. */
John Robbins, Debugging Applications, Microsoft Press, 2000
Общая информация
Методы
Примеры
Щелчок
Продолжительное нажатие
Находится в разделе Buttons.
Компонент ImageButton представляет собой кнопку с изображением (вместо текста). По умолчанию ImageButton похож на обычную кнопку.
В режиме дизайна изображение на кнопке определяется атрибутом android:src
<ImageButton
android:id="@+id/imageButton"
...
android:src="@drawable/cat"/>
Можно сделать двойной щелчок, чтобы сразу установить нужное свойство.
Программно можно установить изображения через различные методы.
С помощью метода setImageURI() можно обратиться к ресурсу типа Drawable по его идентификатору:
android.resource://[пакет]/[идентификатор ресурса]
Например, можно задать путь Uri:
Uri uri = Uri.parse("android.resource://ru.alexanderklimov.imagebuttondemo/" + R.drawable.cat);
Можно обратиться к ресурсу по его типу/имени:
android.resource://[пакет]/[тип ресурса]/[имя ресурса]
В этом случае код будет следующим:
Uri uri = Uri.parse("android.resource://ru.alexanderklimov.imagebuttondemo/drawable/cat");
imageButton.setImageUri(uri);
Как и у обычной кнопки, интерес представляет только щелчок. В нашем примере мы будем менять поочередно картинки на кнопке (нужно подготовить две картинки в папке drawable)
...
ImageButton imageButton;
boolean flag = true;
imageButton.setOnClickListener(new View.OnClickListener()
{
public void onClick(View v)
{
// меняем изображение на кнопке
if (flag)
imageButton.setImageResource(R.drawable.cutecat4);
else
// возвращаем первую картинку
imageButton.setImageResource(R.drawable.cutecat2);
flag = !flag;
}
});
Теперь при каждом щелчке изображение на кнопке будет циклически переключаться между двумя картинками.
Кроме обычного щелчка, в Android есть особый вид нажатия на кнопку - продолжительное нажатие. Это событие происходит, когда пользователь нажимает и удерживает кнопку в течение одной секунды. Этот тип нажатия обрабатывается независимо от обычного щелчка.
Для обработки продолжительного нажатия нужно реализовать класс View.OnLongClickListener и передать его в метод setOnLongClickListener(). Класс OnLongClickListener имеет один обязательный метод OnLongClick(). В принципе это похоже на метод OnClick(), только имеет возвращаемое значение.
imageButton.setOnLongClickListener(new OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
Toast toast = Toast.makeText(getApplicationContext(),
"Long Click",
Toast.LENGTH_SHORT);
toast.setGravity(Gravity.CENTER, 0, 0);
toast.show();
return false;
}
});
Запустите проект и убедитесь, что при быстром нажатии ничего не происходит, а при более продолжительном нажатии всплывает сообщение.