📌  相关文章
📜  在android中的图像按钮上单击效果 (1)

📅  最后修改于: 2023-12-03 15:23:22.013000             🧑  作者: Mango

在Android中的图像按钮上单击效果

在Android界面设计中,显示图像按钮是常见的UI设计。图像按钮通常是由一个Imageview和一个Button组成。当用户触摸此按钮时,通常会触发一个单击效果,以提示用户此按钮已按下。本文将介绍如何在Android中实现图像按钮的单击效果。

要实现图像按钮单击效果,可以使用StateListDrawable类。StateList可以定义View Widget在不同状态下的外观和行为。该类包含一个或多个StateDrawable,每个StateDrawable由于对应一种状态,比如:按下、选中或未选中,以及对应的Drawable对象。根据View的状态,系统会自动从StateList中调取对应的Drawable对象进行显示。

StateListDrawable的用法

StateListDrawable常见的状态集合有5种:

  • state_pressed:按下状态
  • state_focused:获得焦点状态
  • state_selected:选中状态
  • state_enabled:可用状态
  • state_checkable:是否可被选状态

一个典型的StateListDrawable如下所示,其中listSelector作为listView背景时用到,即选择某项时的样式:

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

在图像按钮中,可以先定义一个Drawable类型的selector xml文件,具体代码如下:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <!--按钮按下状态 -->
    <item android:state_pressed="true" android:drawable="@drawable/btn_pressed" />
    <!--按钮默认状态-->
    <item android:drawable="@drawable/btn_normal" />
</selector>

其中btn_pressed为按下状态下的Drawable对象,btn_normal为按钮默认状态下的Drawable对象。

接下来,在Imageview中设置StateListDrawable:

<ImageView
    android:id="@+id/imgBtn"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@drawable/image_btn_selector"
    android:clickable="true"
    android:src="@drawable/btn_bg" 
/>

设置background为上述selector xml文件,即可在Imageview上实现单击效果。

代码实现

在Java代码中实现Button的单击效果,需要为Imageview设置事件监听器,当监听到按下事件时,改变Imageview的背景,以实现按下效果。当监听到抬起事件时,回复默认背景。

ImageView imgBtn = findViewById(R.id.imgBtn);
imgBtn.setClickable(true);
imgBtn.setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                v.setBackgroundResource(R.drawable.img_btn_pressed);
                break;
            case MotionEvent.ACTION_UP:
                v.setBackgroundResource(R.drawable.img_btn_normal);
                break;
        }
        return false;
    }
});

以上代码中setImageResource()函数用于更换Imageview的背景资源。

结论

以上就是在Android中实现图像按钮的单击效果的方法。通过StateListDrawable类配合ImageView实现按下效果,或通过Java代码设置监听器改变Imageview的背景资源,均可以实现图像按钮的单击效果。