Подтвердить что ты не робот

Android выделяет кнопку изображения при нажатии

Я использую ImageButton. Но я не получаю подсветку при нажатии. Я googled, и многие предложили использовать селектор, где отображается другое изображение. Есть ли способ обойти это. используя только одно изображение и выделяя его или придавая ему эффект свечения. так что пользователь знает, что нажата кнопка.

4b9b3361

Ответ 1

На самом деле это не очень сложно сделать. Вам даже не нужно создавать 2 отдельных файла .png или что-то в этом роде. Например, если вы хотите иметь кнопку с градиентом, а затем изменить ее при нажатии кнопки:

Шаг 1: Создать градиент кнопки по умолчанию (drawable/default_button.xml):

<shape xmlns:android="http://schemas.android.com/apk/res/android"
  android:shape="rectangle">
    <corners android:radius="3dp" />
    <gradient android:endColor="#8ba0bb" android:startColor="#43708f" android:angle="90" />
    <stroke android:width="1dp" android:color="#33364252" />
</shape>

Шаг 2: Создайте по умолчанию кнопку нажатой градиент (drawable/default_button_pressed.xml):

<shape xmlns:android="http://schemas.android.com/apk/res/android"
  android:shape="rectangle">
    <corners android:radius="3dp" />
    <gradient android:endColor="#43708f" android:startColor="#8ba0bb" android:angle="90" />
    <stroke android:width="1dp" android:color="#33364252" />
</shape>

Шаг 3: Создайте селектор (drawable/default_button_selector.xml):

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

Шаг 4 (необязательно): Создайте стиль для кнопки (values ​​/style.xml):

<resources>
    <style name="DefaultButton">
        <item name="android:layout_width">wrap_content</item>   
        <item name="android:layout_height">wrap_content</item>
        <item name="android:background">@drawable/default_button_selector</item>
    </style>
</resources>

Шаг 5: используйте кнопку (layout/main.xml):

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
  android:layout_width="fill_parent" android:layout_height="fill_parent">

    <button style="@style/DefaultButton" />

</RelativeLayout>

Как вы можете видеть, это не особенно сложно сделать.

Ответ 2

Без создания нескольких изображений (нажата, обычная и т.д.) и даже не нужно создавать селектор. Используйте setOnTouchListener, а не setOnClickListener. В приведенном ниже коде вам будет отображаться серый наложенный объект.

 ((ImageButton)findViewById(R.id.myImageBtn)).setOnTouchListener(new OnTouchListener() {

      @Override
        public boolean onTouch(View v, MotionEvent event) {
          switch (event.getAction()) {
          case MotionEvent.ACTION_DOWN: {
              ImageButton view = (ImageButton ) v;
              view.getBackground().setColorFilter(0x77000000, PorterDuff.Mode.SRC_ATOP);
              v.invalidate();
              break;
          }
          case MotionEvent.ACTION_UP:

              // Your action here on button click

          case MotionEvent.ACTION_CANCEL: {
              ImageButton view = (ImageButton) v;
              view.getBackground().clearColorFilter();
              view.invalidate();
              break;
          }
          }
          return true;
        }
    });

Ответ 3

Чтобы не устанавливать несколько кнопок для каждой кнопки, я устанавливаю атрибут цветового фильтра кнопки изображения в прослушивающем прикосновении.

Смотрите код здесь в другом сообщении:

fooobar.com/questions/98894/...

Ответ 4

Мне это удалось! Сначала вы объявляете buttonStyle.xml в папке с возможностью переноса.

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

  <item
      android:state_focused="false"
      android:state_pressed="true"
      android:drawable="@drawable/button_pressed" />

  <item android:drawable="@drawable/button_normal" />
</selector>

Затем вы создаете button_pressed.xml в выпадающей папке.

<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" >
  <solid android:color="@color/semiTransparentGnfrBlueColor" />
  <stroke android:width="10dp" android:color="@android:color/transparent" />
</shape>

После этого вы создаете button_normal.xml в папке с возможностью переноса.

<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
       android:innerRadiusRatio="3"
  android:shape="rectangle">
  <solid android:color="@color/gnfrBlueColor"/>
  <stroke android:width="10dp" android:color="@android:color/transparent" />
</shape>

Вы можете использовать цвета по умолчанию, но если вы хотите сделать это, как я, вам нужно иметь файл с именем colors.xml в папке значений и значения внутри:

<?xml version="1.0" encoding="utf-8"?>
<resources>
<item name="gnfrBlueColor" type="color">#2A3748</item>
  <item name="semiTransparentGnfrBlueColor" type="color">#602A3748</item>
<integer-array name="androidcolors">
<item>@color/gnfrBlueColor</item>
    <item>@color/semiTransparentGnfrBlueColor</item>
  </integer-array>
</resources>

Наконец, вы установите это на свою кнопку или что-то еще:

savedAccountLoginButton.SetBackgroundResource(Resource.Drawable.buttonStyle);

УВЕДОМЛЕНИЕ ЧТО Я устанавливаю ход с прозрачным цветом, потому что, когда вы устанавливаете backgroundresource, ваша кнопка становится больше, и этот трюк остается оригинальным.

Это единственный способ, которым я мог бы архивировать это программно.

Если вы хотите сделать это с помощью XML:

<Button
            android:text="ENTRAR"
            android:layout_width="match_parent"
            android:layout_height="60dp"
            android:background="@drawable/buttonstyle"
            android:textColor="@color/white"
            android:textSize="18sp"
            android:id="@+id/button1" />