Android: как нарисовать ImageButton, используя нажатое состояние, нарисованное для сфокусированного состояния - PullRequest
1 голос
/ 28 января 2011

Я пытаюсь добиться эффекта, когда после нажатия кнопка ImageButton рисует с «нажатым» оранжевым фоном, пока не потеряет фокус (что-то еще трогается).

StateListDrawable кажется предназначенным для этой ситуации, потому что это позволило бы мне определить, как фон должен быть нарисован для сфокусированного состояния. И было бы замечательно, если бы я мог просто определить, что фон должен быть нарисован с нажатой прорисовкой для сфокусированного состояния. Тем не менее, я не вижу способа ссылаться на «нажатую» отрисовку по умолчанию.

Какой-нибудь совет, как мне добиться этого эффекта?

Ответы [ 3 ]

5 голосов
/ 28 января 2011

если я понимаю ваш вопрос, может быть, может помочь вам

я делаю ту же задачу, определяя селектор фона xml, который содержит рисованные объекты для каждого состояния, этот файл более обширный, потому что вы можете определять рисованные объекты, фигуры и т. Д.... Самая важная особенность заключается в том, что вы можете установить любой рисунок или фигуру, какую захотите ...

здесь я определил свой селектор фона ... и я назвал его selector.xml и сохранил в папке для рисования.

<?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:state_selected="true" android:drawable="@drawable/shape_7"/>
        <item android:state_pressed="true" android:drawable="@drawable/shape_7" />
        <item android:state_pressed="false" android:drawable="@drawable/shape_6" />
    </selector>

позже, когда я создаю ImageButton, я присоединяю селектор, упомянутый выше ... (вы можете сделать это программно или в вашем XML-макете)

ImageButton imageButton = new ImageButton(this);
imageButton.setBackgroundDrawable(getResources().getDrawable(R.drawable.selector));

или способ xml

<ImageView
    android:background="@drawable/selector"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:padding="4px"
    android:src="@drawable/switch_icon"/>

ура

1 голос
/ 28 января 2011

Загляните в папку drawables внутри Android SDK. Вы можете найти все девять изображений патчей, которые он использует по умолчанию. Те, которые вы хотите, скорее всего, называются btn_pressed, btn_focused и т. Д. Или что-то подобное. Технически вы можете ссылаться на них по идентификатору в вашем проекте, но я полагаю, что вам рекомендуется скопировать их в свой проект, потому что идентификаторы не гарантированы, чтобы остаться прежними.

0 голосов
/ 10 декабря 2012

Это то, что мне помогло в теме Holo Dark моего приложения, но у него нет закругленных краев, которые мне бы хотелось.

res / drawable / image_button_background.xml:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@android:color/holo_blue_dark" android:state_pressed="true"/>
</selector>

Использовать как:

android:background="@drawable/image_button_background"
...