zoukankan      html  css  js  c++  java
  • Android之Button自定义点击效果

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

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

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

                 在drawable下新建selector.xml文件:

              

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


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

          

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

       

    [html] view plaincopy
     
    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

        

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


                下面看下点击效果:

               点击button前:

          

           当按下button按钮时:

           

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

            首先在main.xml中添加:

         

    [html] view plaincopy
     
    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中实现:

        

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

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

  • 相关阅读:
    Java实现 蓝桥杯VIP 基础练习 回形取数
    Java实现 蓝桥杯VIP 基础练习 回形取数
    Java实现 蓝桥杯VIP 基础练习 回形取数
    Java实现 蓝桥杯VIP 基础练习 回形取数
    Java实现 蓝桥杯VIP 基础练习 报时助手
    Java实现 蓝桥杯VIP 基础练习 报时助手
    Java实现 蓝桥杯VIP 基础练习 报时助手
    Java实现 蓝桥杯VIP 基础练习 报时助手
    Java实现 蓝桥杯VIP 基础练习 报时助手
    block的是发送信号的线程,又不是处理槽函数的线程
  • 原文地址:https://www.cnblogs.com/tdalcn/p/3443497.html
Copyright © 2011-2022 走看看