在Android按钮中使用图像效果

在Android按钮中使用图像效果,android,button,layout,Android,Button,Layout,(现在我遇到了有关StackOverflow的相关问题,但不幸的是,没有一个解决方案对我有效,这就是为什么我必须单独提问的原因) 我是Android的新手。问题是:我需要一个像按钮一样的图像。现在我明白了,这可以通过在标准按钮上使用图像或使用称为“ImageButton”的东西来实现(我想这是强烈推荐的,尽管我不知道为什么) 要求:我需要关于这个问题的详细指导。具体来说,我认为“将图像放在标准按钮上”更容易,直到我面临两个主要问题:我无法将图像设置在中间(感谢可绘制的顶部、底部、左侧6、右侧),

(现在我遇到了有关StackOverflow的相关问题,但不幸的是,没有一个解决方案对我有效,这就是为什么我必须单独提问的原因)

我是Android的新手。问题是:我需要一个像按钮一样的图像。现在我明白了,这可以通过在标准按钮上使用图像或使用称为“ImageButton”的东西来实现(我想这是强烈推荐的,尽管我不知道为什么)

要求:我需要关于这个问题的详细指导。具体来说,我认为“将图像放在标准按钮上”更容易,直到我面临两个主要问题:我无法将图像设置在中间(感谢可绘制的顶部、底部、左侧6、右侧),一旦我更改背景颜色以匹配活动屏幕的背景颜色,按钮效果就会消失。简单地说,我需要一个适度简单的方法,让一个图像充当一个按钮,或者一个具有三种效果的按钮:聚焦、按下和默认。我使用了ImageButton,但我不知道如何制作自定义形状或9patch图像来提供所有想要的效果,我对android提供的默认按钮非常满意。我所需要的只是像一个背景悬停在图像或类似的东西,这表明用户正在按下图像和事件已生成

有人能帮我解决这个问题吗?我需要的UI看起来体面,因此,需要对我的图像/按钮的相应效果。提前感谢:)

这是我的图标图像:


我希望在这周围有某种悬停效果,表明图像已经像任何普通按钮一样被按下。

使用
ImageButton
和。您需要为不同按钮的状态选择。您可以为不同的状态指定不同的drawable,以模拟正常按钮上的onFocus或onPressed效果

这是
res
下的
drawable
文件夹中的
selector.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/cyan"/> <!-- focused state -->
<item android:drawable="@android:color/transparent"/> <!-- default state -->

</selector>
<?xml version="1.0" encoding="utf-8"?>
<resources>
        <color name="cyan">#33B5E5</color>
</resources>
ImageButton
的src设置为您的图像,并将背景设置为
selector.xml

这是最终结果:

这里有一个很好的教程:

创建xml视图

<ImageView
 android:id="@+id/imageview1"
 android:background="@drawable/selector_xml_name"
 android:layout_width="200dp"
 android:layout_height="126dp"/>

创建内部可绘制文件夹选择器\u xml\u name.xml

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

创建内部可绘制文件夹numpad\u button\u bg\u selected.xml

 <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" android:padding="90dp">
 <solid android:color="@color/selected"/>
 <padding />
 <stroke android:color="#000" android:width="1dp"/>
 <corners android:bottomRightRadius="15dp" android:bottomLeftRadius="15dp" android:topLeftRadius="15dp" android:topRightRadius="15dp"/>


如果有人对此仍有疑问。 我创建了选择器,但将drawable引用到了两个不同的图像文件,并使用imagebutton中的XML作为源。它就像一个符咒

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

图像按钮如下所示:

    <ImageButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/add_button_selector"
        android:background="@null"/>


您可以使用渐变来实现这一点。请参阅为什么不使用布局,可能是带有图像的RelativeLayout,向RelativeLayout添加OnClickListener。您可以编写一个带有聚焦、按下和默认值的选择器。看看这个选择器,很简单,谢谢你的参考。我不可能使用android为我们提供的默认状态动画吗?因此,除了为这三个状态提供三个不同的图像外,我不可能使用android提供的默认动画吗?@DarthCoder,哪种动画?可绘制动画可用。如果你展示一些你想要的结果,我想我们可以进一步帮助你。我想说的是,当按下按钮时,我喜欢android默认的蓝色(果冻豆)效果。默认情况下,按钮看起来是深灰色的,但可以使用xml进行更改。当我使用drawable top将图像添加到按钮,然后将按钮的背景颜色更改为黑色以匹配活动背景时,我失去了按钮按下的效果。此外,我无法在按钮的中心获得图像(尽管我可以使用android:gravity=“center”)在图像按钮的中心获得图像)是类似的!!我的意思是图像周围的蓝色框稍微大一点。这能做到吗?谢谢:)非常感谢@Sam Rad,这太棒了:)