我们在界面上经常会用到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. qq红心头像[中国心]制作教程之Photoshop教程

    QQ红心头像[中国心]制作教程之Photoshop教程 中国最大的WEB开发资源网站及技术社区,阿里西西WEB开发 最近网络流传着很多qq红心头像,msn红心头像,中国心图标等等,最有些搞笑的是还有正 ...

  2. magento获取页面url的办法还有magento的常用函数

    <?php echo $this->getStoreUrl('checkout/cart');?> 获取结账页面的url:<?php echo $this->getUrl ...

  3. 深度理解Key-Value Observing 键值观察

    前言   在上一阶段的开发过程中,我们大量使用了 KVO 机制,来确保页面信息的及时同步.也因此碰到了很多问题,促使我们去进一步学习 KVO 的相关机制,再到寻找更好的解决方案.鉴于 KVO 让人欲仙 ...

  4. 正则表达式 regular expression

    原博客地址:http://www.cnblogs.com/deerchao/archive/2006/08/24/zhengzhe30fengzhongjiaocheng.html

  5. VS2010 安装使用STLPort

    VS2010 安装使用STLport 1.本机环境 win7 64位 visual studio 2010 中文旗舰版 STLport-5.2.1.tar.bz2 2.下载STLport http:/ ...

  6. Neutron Metering as a Service

    1, /etc/neutron/neutron.conf   service_plugins = router,metering    notification_driver=neutron.open ...

  7. Codeforces Round #133 (Div. 2)

    A. Tiling with Hexagons 看成大三角形扣去3个小三角形. B. Forming Teams 由于每个点的度数不超过2,所以最后每个点要么在一条链上要么在一个环上. 在环上的话,每 ...

  8. Java——正则表达式(字符串操作)

     public class Test1 { /* * 正则表达式:对字符串的常见操作: * 1.匹配: *  其实是用的就是string类中的matches(匹配)方法. * 2.切割 *  其实 ...

  9. Machine and Deep Learning with Python

    Machine and Deep Learning with Python Education Tutorials and courses Supervised learning superstiti ...

  10. (转) ICML2016 TUTORIAL参会分享

    ICML2016 TUTORIAL参会分享 本文转自: https://mp.weixin.qq.com/s?__biz=MzI3MDE4NTk4MQ==&mid=2658399541& ...