2016-07-11 3 views
1

Я пытаюсь сделать мою кнопку изображения хорошо выглядеть. Я пробовал пару разных методов, но они выглядели не так. Это круглое изображение, и я хочу, чтобы он выглядел так, как будто он может быть нажат. Вот что у меня есть до сих пор. Андроид: textAppearance = "? Android: attr/textAppearanceLarge" делает его похожим на нажатие кнопки, показывая квадратный квадрат. Как можно заниматься этой работой?Android - ImageButton щелчок

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 

    <FrameLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:background="#FFFFFF" 
     android:layout_centerHorizontal="true"> 

     <ImageButton 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:id="@+id/connectButton" 
      android:background="?android:attr/selectableItemBackground" 
      android:src="@drawable/myImage" 
      android:layout_gravity="center" 
      android:layout_centerVertical="true" 
      android:layout_centerHorizontal="true" /> 

     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:textAppearance="?android:attr/textAppearanceLarge" 
      android:text="Press To Connect To Device" 
      android:id="@+id/connectMessage" 
      android:layout_gravity="center_horizontal|top" 
      android:layout_marginTop="10dp" /> 
    </FrameLayout> 

    <ProgressBar 
     android:id="@+id/progressBar" 
     style="?android:attr/progressBarStyleLarge" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_centerHorizontal="true" 
     android:layout_centerVertical="true" 
     android:visibility="gone" 
     android:indeterminateDrawable="@drawable/progress" > 
    </ProgressBar> 

</RelativeLayout> 
+0

я могу заставить его работать с обычной кнопкой текста, но создавая свой собственный селектор и т.д., как показано здесь http://stackoverflow.com/questions/9884202/custom-circle-button Сравнивая этот метод HTTPS://developer.android.com/reference/android/widget/ImageButton.html заставляет меня думать, что мне нужно несколько изображений по умолчанию и щелкнуло хотя – Ubarjohade

+0

. Это неправильный ответ, но это отличный способ добавить кнопку «текст/изображение». http://www.viralandroid.com/2016/01/circular-button-with-icon-and-text-in-android.html – Ubarjohade

ответ

2

Вы можете используйте .xml-файл как выталкиваемый из вашей кнопки. Просто выберите фон кнопки как XML, как:

android:background="@drawable/selector1" 

А затем определить свой selector1.xml в вытяжке папке:

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
<item android:state_pressed="true" 
     android:drawable="@color/cyan"/> <!-- pressed state --> 
<item android:state_focused="true" 
     android:drawable="@color/magenta"/> <!-- focused state --> 
<item android:drawable="@android:color/transparent"/> <!-- default state --> 
</selector> 

Вы также можете выбрать различные изображения в качестве фона кнопки. Также вы можете использовать его для: Button & ImageButton.

Надеюсь, это поможет! :)

1

Вместо того, чтобы делать это в XML, почему бы не сделать это в коде Java с OnClickListener?

У вас могут быть два изображения: «обычная кнопка» и изображение «нажатой кнопки».

Затем на кнопку вы можете изменить изображение на «нажав на кнопку» изображение в течение определенного периода времени (1 - 3 секунды), а затем изменить его обратно в «обычной кнопки» если применимо

+0

Да, я прокомментировал свой пост с чем-то похожим. У меня только 1 изображение, и мои навыки Photoshop ужасны, поэтому я надеялся, что есть другой метод. – Ubarjohade

+0

@Ubarjohade вы можете использовать paint или paint.net для этого, просто возьмите цвет кнопки и немного затемните его для нажатой кнопки. Если вам не комфортно редактировать изображения, я мог бы сделать это, если вы дадите мне оригинальную кнопку – hellyale

0

Это отнюдь не оптимальный способ, но хороший небольшой метод, который я нашел, выглядел так, как я хотел. Я сделал два XML для нажатой кнопки и по умолчанию (код повторения!)

round_button.xml

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle"> 
    <corners android:radius="200dp" /> 
    <solid android:color="#FFFFFF" /> 
    <stroke 
     android:width="5dip" 
     android:color="#000000" /> 

    <gradient 
     android:startColor="#000000" 
     android:centerColor="#FFFFFF" 
     android:endColor="#000000" 
     android:angle="90"> 
    </gradient> 
</shape> 

round_button_pressed.xml

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle"> 
    <corners android:radius="200dp" /> 
    <solid android:color="#FFFFFF" /> 
    <stroke 
     android:width="8dip" 
     android:color="#000000" /> 

    <gradient 
     android:startColor="#FFFFFF" 
     android:centerColor="#000000" 
     android:endColor="#FFFFFF" 
     android:angle="90"> 
    </gradient> 
</shape> 

Теперь при создании кнопки добавить это. Хотя этот метод не является оптимальным, он позволяет выполнять различные действия и стиль нажатия на пользователя.

connectButton.setOnTouchListener(new View.OnTouchListener() { 
       @Override 
       public boolean onTouch(View view, MotionEvent event) { 
        if(event.getAction() == MotionEvent.ACTION_DOWN){ 
         connectButton.setBackgroundResource(R.drawable.round_button_press); 
         return true; 
        }else if(event.getAction() == MotionEvent.ACTION_UP){ 
         connectButton.setBackgroundResource(R.drawable.round_button); 
         connect(); 
         return true; 
        }else{ 
         Log.e(TAG, event.getAction() + ""); 
         return true; 
        } 

       } 
      });