在android中有一个ImageButton的View,跟Button按钮的区别是可以在Imagebutton上加载一个图片。

从ImageButton这个字面意思上来看,它是一个图片按钮,那么我们就可以使用它做一个我们想要的图片按钮了,但是我们在实际使用的过程当中,就会发现该按钮的使用并没有想像中的那么简单,需要再增加一些代码或再配置XML才能实现图片按钮按下的效果,个人感觉有点麻烦,不知道google为什么这么做?

下面是个图片按钮正常状态的效果:

下面是图片按钮按下的效果图片:

我们来看一下如何实现上面的效果。

实现图片按钮按下的效果有两种方式可以实现:一是增加代码,二配置XML。

一、在java中为图片按钮增加触摸监听的函数来实现图片切换,代码如下:

        ImageButton btn = (ImageButton)findViewById(R.id.imageButton1);        btn.setOnTouchListener(new View.OnTouchListener(){           public boolean onTouch(View v, MotionEvent event) {             if(event.getAction() == MotionEvent.ACTION_DOWN){     //重新设置按下时的背景图片((ImageButton)v).setImageDrawable(getResources().getDrawable(R.drawable.android_btn_pressed));                            }else if(event.getAction() == MotionEvent.ACTION_UP){     //再修改为抬起时的正常图片((ImageButton)v).setImageDrawable(getResources().getDrawable(R.drawable.android_btn));   }return false;     }     });

代码比较简单,就是当图片按下时,修改按钮的背景图片,当抬起时再修改为正常的图片显示。

二、通过给按钮配置XML文件来实现图片按钮的背景切换效果,方法如下:

1) 在Layout下增加一个image_btn_press.xml文件,内容如下:

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

在这个文件中可以设置按钮图片的正常时的图片、具有焦点时的图片和按下时的图片。在本例中将按钮的正常图片和焦点图片设置成同样的效果了。

或者你也可以将state_focused的整个属性行删除。

另外,该XML配置文件不一定要存放在layout的目录下,您也可以存放在drawable的目录下。

2) 在main.xml中设置图片按钮的属性,装上面的xml文件增加到图片按钮中,内容如下:

    <ImageButtonandroid:id="@+id/imageButton2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:background="@layout/image_btn_press" />

在ImageButtonk中指定background的属性值:@layout/image_btn_press,其中image_btn_press就是上面为该图片铵钮创建的XML配置文件,文件名不要写错了。同时,你也可以将image_btn_press.xml文件放到drawable的目录下,此时,就要将它的属性值修改为:@drawable/image_btn_press即可,也就是说指定它的XML文件的正确路经就行了。

另外,需要特别注意的是在ImageButton中,如果使用XML配置文件来设置图片的效果的话,就不要再指定它的android:src=""属性值了,否则图片的按下效果就出不来了。

这两种方法各有各的好处,在实际运用过种当种可以根据自己的需要进行选择。

附上面实例的源代码下载:http://download.csdn.net/detail/ztp800201/4106649

该源代码分别使用了两种的方法实现了图片按钮的效果。其中上面的图片按钮是用代码实现的,下面的图片是用XML实现的。

Android - ImageButton单击切换按钮图片效果的实现相关推荐

  1. android怎么点击换图片,ImageButton单击切换按钮图片

    有时单击ImageButton图片按钮时需要获取变换图片的效果,在这里介绍两种方法仅供参考 正常显示 点击切换 方法一:通过给按钮配置XML文件来实现图片按钮的背景切换效果 在layout或者是dra ...

  2. ImageButton单击切换按钮图片

    有时单击ImageButton图片按钮时需要获取变换图片的效果,在这里介绍两种方法仅供参考 正常显示 点击切换 方法一:通过给按钮配置XML文件来实现图片按钮的背景切换效果 在layout或者是dra ...

  3. WPF 动态切换按钮图片

    WPF动态切换按钮图片就是在鼠标移上去的时候显示另一张图片 首先先把三张图片放上去 第一张 第二张 第三张 然后给他们一个值,鼠标移上去的时候是true,显示图片,鼠标移开的时候显示false不显示图 ...

  4. QT实现点击按钮,切换按钮图片

    对于实现QT中点击按钮切换按钮图片的功能,之前学习时做过一个项目,用到过这个功能. 之前是用代码的方式实现,后来实习之后,参与的一个项目中也用到这个功能,所以借此机会学习了一种新方法. 新方法不用代码 ...

  5. android 照片点击查看,Android PhotoView点击放大图片效果

    使用的PhotoView是这个版本的,比较小巧,很好用,比github上另一个版本的瘦身很多:https://github.com/bm-x/PhotoView 基本测试代码如下:import jav ...

  6. Qt 实现按钮点击切换按钮图片

    最近在做一个课程设计(智能家居管家),因为控制要用到门,灯,警报等一系列至少拥有两个状态的物品,所以想弄一个切换图片的效果,点击按钮一次,按钮上的图片切换成另一个图片(另一个状态),再次点击切换回去. ...

  7. qt中如何模拟按钮点击_Qt 实现按钮点击切换按钮图片

    最近在做一个课程设计(智能家居管家),因为控制要用到门,灯,警报等一系列至少拥有两个状态的物品,所以想弄一个切换图片的效果,点击按钮一次,按钮上的图片切换成另一个图片(另一个状态),再次点击切换回去. ...

  8. android jni示例_Android切换按钮,开关示例

    android jni示例 Today we will learn about Android Toggle Button and Switch in android app. We'll discu ...

  9. android fragment实例化,Android使得Fragment 切换时不重新实例化

    以前实现Fragment的切换都是用replace方法实现 public void startFragmentAdd(Fragment fragment) { FragmentManager frag ...

最新文章

  1. vim 键盘宏操作 -- 大道至简
  2. 美国新规:自动驾驶车,从此不需要驾驶位了
  3. MOSS2010站点大文件上传设置
  4. nagios监控mysql
  5. Spring / Hibernate使用log4jdbc改进了SQL日志记录
  6. 【渝粤教育】国家开放大学2018年春季 0359-22T会计学原理 参考试题
  7. 8 年后重登王座,Python 再度成为 TIOBE 年度编程语言
  8. tone mapping简介
  9. cuSPARSE库:(十四)求解稀疏三角形线性系统(solution of sparse triangular linear systems)
  10. java调用lingo实例_LINGO使用教程(一)
  11. 机器人新车号牌安装_他指挥机器人给新车“穿衣” 分分钟搞定
  12. CorelDRAWX4的VBA插件开发(二十九)使用C++制作动态连接库DLL辅助VBA构键强大功能-(3)制作最简单的可供调用的DLL
  13. 删除之后页码显示的bug
  14. ISA防火墙规则练习
  15. Bundle-Adjustment并行求解器
  16. 【BZOJ4453】cys就是要拿英魂! 后缀数组+单调栈+set
  17. java学生基本信息管理_Java课程设计 - 学生基本信息管理
  18. 管理系统中计算机应用VIF,vif第1章课件.ppt
  19. Angular4中使用PrimeNG calendar
  20. 计算机视觉基础之IoU和mIoU

热门文章

  1. SQL Server 添加与删除主键约束
  2. oracle跨数据库复制数据表-dblink
  3. Dbeaver从一个数据库复制表到另外一个数据库
  4. 名创优品搭建私域流量池,公众号引流企微,实现社群粉丝快速增长
  5. camera-link相机模拟器:仿真相机生成图片数据流
  6. C语言浮点数的发送和接收
  7. 编译原理 —— 正规文法转换为正规式
  8. [深度学习] imgaug边界框增强笔记
  9. 79-80 - 硬盘驱动程序设计
  10. 解决elementUI轮播图点击跳转到相应页面的问题