我们在界面上经常会用到button按钮,但通常button点击后看不到点击的效果,如果用户连续点击了两次,就会报NAR错误,这样交互性就比较差了。如果我们自定义了button点击效果,比如我们点击了button能让我们看到我们确实点击了button按钮,这样就会有效的避免重复点击了。

自定义点击效果有两种方式,一种是在xml中定义,另一种是在代码中定义。

首先看一下如何在xml中定义:

在drawable下新建selector.xml文件:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <selector xmlns:android="http://schemas.android.com/apk/res/android">
  3. <item android:drawable="@drawable/button_press" android:state_pressed="true"/>
  4. <item android:drawable="@drawable/button_nomal" android:state_focused="false" android:state_pressed="false"/>
  5. <item android:drawable="@drawable/button_focus"  android:state_focused="true"/>
  6. <item android:drawable="@drawable/button_nomal" android:state_focused="false"/>
  7. </selector>

定义了两种状态 一种是按下  一种是获得焦点。  drawable分别引用了这三张图片

然后在main.xml下添加button按钮

  1. <Button
  2. android:id="@+id/button1"
  3. android:layout_width="wrap_content"
  4. android:layout_height="wrap_content"
  5. android:text="button效果演示"
  6. android:background="@drawable/selector" />

在MainActivtiy中得到button

  1. Button button1=(Button) this.findViewById(R.id.button1);
  2. button1.setOnClickListener(new View.OnClickListener() {
  3. @Override
  4. public void onClick(View v) {
  5. // TODO Auto-generated method stub
  6. Toast.makeText(getApplicationContext(), "你点击了button按钮", Toast.LENGTH_SHORT).show();
  7. }
  8. });

下面看下点击效果:

点击button前:

当按下button按钮时:

接下来 看下第二种实现方式,在代码中实现:

首先在main.xml中添加:

  1. <Button
  2. android:id="@+id/button2"
  3. android:layout_width="wrap_content"
  4. android:layout_height="wrap_content"
  5. android:text="button效果演示"
  6. android:background="@drawable/button_nomal"/>

接下面在MainActivity中实现:

  1. Button button2=(Button) this.findViewById(R.id.button2);
  2. button2.setOnTouchListener(new OnTouchListener() {
  3. @Override
  4. public boolean onTouch(View v, MotionEvent event) {
  5. // TODO Auto-generated method stub
  6. if(event.getAction()==MotionEvent.ACTION_DOWN){
  7. v.setBackgroundResource(R.drawable.button_press);
  8. }else if(event.getAction()==MotionEvent.ACTION_UP){
  9. v.setBackgroundResource(R.drawable.button_nomal);
  10. }
  11. return false;
  12. }
  13. });

在这类绑定了button的OnTouchListener监听,因为OnClickListener继承了OnTouchListener。运行效果和上面一样,这里不做过多解释。

Android之Button自定义点击效果的更多相关文章

  1. Android 纯代码加入点击效果

    项目中非常多的Button, 同一时候配置非常多button切图,Selector是不是非常烦, 使用以下这个类,就能够直接为Button添加点击效果. 不用多个图片,不用Selector. 使用方法 ...

  2. Android checkbox 自定义点击效果

    安卓默认的效果                         自定义后的效果 前面的图片当然可以自己修改. 实现这个效果的步骤如下 1.建立 一个selector 的xml <?xml ver ...

  3. Android MaterialDesign之水波点击效果的几种实现方法

    什么是水波点击的效果? 下面是几种不同的实现方法的效果图以及实现方法   Video_2016-08-31_003846 如何实现? 方法一 使用官方提供的RippleDrawable类 优点:使用方 ...

  4. Android之水波纹点击效果(RippleView)

    Android5.0后各种炫的效果纷纷出来,写这篇博客主要是讲的是按钮点击效果带有的水波纹(波浪式). 当然我写的这个是自定义来实现的,在低版本(5.0一下)也可以实现点击效果.看看效果图: 上图可看 ...

  5. 如何让LinearLayout也有类似Button的点击效果?

    有的时候,我们希望LinearLayout布局也有点击的效果,这时候我们不仅需要一个作为背景的selector,还要设置一些其它属性才行: android:clickable="true&q ...

  6. android 总结(样式)—跑马灯 button的点击效果 RadioGroup 实现滑动的效果 button 下面有阴影 卡片样式

    <Button android:layout_width="wrap_content" android:layout_height="wrap_content&qu ...

  7. Android ImageButton | Button | TextView 点击和触摸效果

    ImageButton------------------------------------------------> 一.Java  代码: 在drawable目录下添加新的xml文件 bu ...

  8. android自定义控件(4)-自定义水波纹效果

    一.实现单击出现水波纹单圈效果: 照例来说,还是一个自定义控件,观察这个效果,发现应该需要重写onTouchEvent和onDraw方法,通过在onTouchEvent中获取触摸的坐标,然后以这个坐标 ...

  9. Android解决button反复点击问题

    public class BaseActivity extends Activity { protected boolean isDestroy; //防止反复点击设置的标志.涉及到点击打开其它Act ...

随机推荐

  1. 【转】MySQL命令

    1.连接Mysql 格式: mysql -h主机地址 -u用户名 -p用户密码 1.连接到本机上的MYSQL.首先打开DOS窗口,然后进入目录mysql\bin,再键入命令mysql -u root ...

  2. UI学习笔记---第二天

    程序的执行流程 一.自定义视图 自定义UILebal-UITextField视图 ⾃定义视图:系统标准UI之外,⾃己组合而出的新的视图. 实际开发中,我们还需⾃定义视图.积累⾃己的代码库.⽅便开发. ...

  3. 一张图让你学会LVM

    导读 随着科技的进步,人们不知不觉的就进入了大数据的时代,数据的不断增加我们发现我们的磁盘越来越不够用了,接下来就是令人头疼的事情--加硬盘,数据的备份与还原.LVM就是Linux下专门针对我们数据的 ...

  4. Jquery_笔记

    1.请确保在 <body> 元素的onload事件中没有注册函数,否则不会触发+$(document).ready()事件.

  5. mysql中slow query log慢日志查询分析

    在mysql中slow query log是一个非常重要的功能,我们可以开启mysql的slow query log功能,这样就可以分析每条sql执行的状态与性能从而进行优化了. 一.慢查询日志 配置 ...

  6. hdu1827 强连通

    题意:一个人需要联系其他所有人,已知他自己联系每个人的花费,并且他可以联系某个人再让他联系他能联系到的人,给出一系列关系表示 A 能够联系 B.问他最少需要联系多少人,花费多少钱 首先,建成一个有向图 ...

  7. PMP-合同类型

    1.Fixed-price or lump-sum contracts(固定总价或总包合同)简称FP 这是买方(甲方)最能受益的合同类型.不管乙方开销多大,甲方付的钱是固定不变的. 2.Time an ...

  8. java 类型转json格式

    json-lib-2.4-jdk15.jar List<People> mapPersonTypes = null; private JSONArray json_mapPersonTyp ...

  9. A better SHOW TABLE STATUS

    From command line we have the entire MySQL server on hands (if we have privileges too of course) but ...

  10. 你可能不知道的 Linux 命令行网络监控工具

    http://developer.51cto.com/art/201505/476651_2.htm 对任何规模的业务来说,网络监控工具都 是一个重要的功能.网络监控的目标可能千差万别.比如,监控活动 ...