Android 滑动开关控件

效果预览:  
Android <wbr>滑动开关控件  
Android <wbr>滑动开关控件  

SlipButton.java 
Java代码     收藏代码
  1. package com.iaiai.activity;  
  2.   
  3. import android.content.Context;  
  4. import android.graphics.Bitmap;  
  5. import android.graphics.BitmapFactory;  
  6. import android.graphics.Canvas;  
  7. import android.graphics.Matrix;  
  8. import android.graphics.Paint;  
  9. import android.graphics.Rect;  
  10. import android.util.AttributeSet;  
  11. import android.view.MotionEvent;  
  12. import android.view.View;  
  13. import android.view.View.OnTouchListener;  
  14.   
  15.   
  16. public class SlipButton extends View implements OnTouchListener  
  17.     public interface OnChangedListener  
  18.         abstract void OnChanged(String strName, boolean CheckState);  
  19.      
  20.   
  21.     private String strName;  
  22.     private boolean enabled true 
  23.     public boolean flag false;// 设置初始化状态  
  24.     public boolean NowChoose false;// 记录当前按钮是否打开,true为打开,flase为关闭  
  25.     private boolean OnSlip false;// 记录用户是否在滑动的变量  
  26.     public float DownX 0f, NowX 0f;// 按下时的x,当前的x,NowX>100时为ON背景,反之为OFF背景  
  27.     private Rect Btn_On, Btn_Off;// 打开和关闭状态下,游标的Rect  
  28.   
  29.     private boolean isChgLsnOn false 
  30.     private OnChangedListener ChgLsn;  
  31.     private Bitmap bg_on, bg_off, slip_btn;  
  32.   
  33.     public SlipButton(Context context)  
  34.         super(context);  
  35.         init();  
  36.      
  37.   
  38.     public SlipButton(Context context, AttributeSet attrs)  
  39.         super(context, attrs);  
  40.         init();  
  41.      
  42.   
  43.     public void setChecked(boolean fl)  
  44.         if (fl)  
  45.             flag true 
  46.             NowChoose true 
  47.             NowX 80 
  48.         else  
  49.             flag false 
  50.             NowChoose false 
  51.             NowX 0 
  52.          
  53.      
  54.   
  55.     public void setEnabled(boolean b)  
  56.         if (b)  
  57.             enabled true 
  58.         else  
  59.             enabled false 
  60.          
  61.      
  62.   
  63.     private void init() {// 初始化  
  64.         // 载入图片资源  
  65.         bg_on BitmapFactory.decodeResource(getResources(), R.drawable.on_btn);  
  66.         bg_off BitmapFactory.decodeResource(getResources(), R.drawable.off_btn);  
  67.         slip_btn BitmapFactory.decodeResource(getResources(), R.drawable.white_btn);  
  68.         // 获得需要的Rect数据  
  69.         Btn_On new Rect(00slip_btn.getWidth(), slip_btn.getHeight());  
  70.         Btn_Off new Rect(bg_off.getWidth() slip_btn.getWidth(), 0bg_off.getWidth(), slip_btn.getHeight());  
  71.         setOnTouchListener(this);// 设置监听器,也可以直接复写OnTouchEvent  
  72.      
  73.   
  74.     @Override  
  75.     protected void onDraw(Canvas canvas) {// 绘图函数  
  76.         super.onDraw(canvas);  
  77.         Matrix matrix new Matrix();  
  78.         Paint paint new Paint();  
  79.         float x;  
  80.          
  81.             if (flag)  
  82.                 NowX 80 
  83.                 flag false 
  84.             }// bg_on.getWidth()=71  
  85.             if (NowX (bg_on.getWidth() 2))// 滑动到前半段与后半段的背景不同,在此做判断  
  86.                 canvas.drawBitmap(bg_off, matrix, paint);// 画出关闭时的背景  
  87.             else  
  88.                 canvas.drawBitmap(bg_on, matrix, paint);// 画出打开时的背景  
  89.   
  90.             if (OnSlip) {// 是否是在滑动状态,  
  91.                 if (NowX >= bg_on.getWidth())// 是否划出指定范围,不能让游标跑到外头,必须做这个判断  
  92.                     bg_on.getWidth() slip_btn.getWidth() 2;// 减去游标1/2的长度...  
  93.                 else  
  94.                     NowX slip_btn.getWidth() 2 
  95.             else {// 非滑动状态  
  96.                 if (NowChoose)// 根据现在的开关状态设置画游标的位置  
  97.                     Btn_Off.left;  
  98.                 else  
  99.                     Btn_On.left;  
  100.              
  101.             if (x 0)// 对游标位置进行异常判断...  
  102.                 0 
  103.             else if (x bg_on.getWidth() slip_btn.getWidth())  
  104.                 bg_on.getWidth() slip_btn.getWidth();  
  105.             canvas.drawBitmap(slip_btn, x, 0paint);// 画出游标.  
  106.          
  107.      
  108.   
  109.     public boolean onTouch(View v, MotionEvent event)  
  110.         if (!enabled)  
  111.             return false 
  112.          
  113.         switch (event.getAction()) {// 根据动作来执行代码  
  114.         case MotionEvent.ACTION_MOVE:// 滑动  
  115.             NowX event.getX();  
  116.             break 
  117.         case MotionEvent.ACTION_DOWN:// 按下  
  118.             if (event.getX() bg_on.getWidth() || event.getY() bg_on.getHeight())  
  119.                 return false 
  120.             OnSlip true 
  121.             DownX event.getX();  
  122.             NowX DownX;  
  123.             break 
  124.         case MotionEvent.ACTION_UP:// 松开  
  125.             OnSlip false 
  126.             boolean LastChoose NowChoose;  
  127.             if (event.getX() >= (bg_on.getWidth() 2))  
  128.                 NowChoose true 
  129.             else  
  130.                 NowChoose false 
  131.             if (isChgLsnOn && (LastChoose != NowChoose))// 如果设置了监听器,就调用其方法..  
  132.                 ChgLsn.OnChanged(strName, NowChoose);  
  133.             break 
  134.         default 
  135.   
  136.          
  137.         invalidate();// 重画控件  
  138.         return true 
  139.      
  140.   
  141.     public void SetOnChangedListener(String name, OnChangedListener l) {// 设置监听器,当状态修改的时候  
  142.         strName name;  
  143.         isChgLsnOn true 
  144.         ChgLsn l;  
  145.      
  146.  


MainActivity.java  
Java代码  
根据引用的内容,这段引用中包含了一些Vue.js代码和HTML代码,并讨论了换行符和空格在网页中的使用。其中,引用是关于添加和还原换行符的方法,引用是关于在编辑数据时获取详情和使用textarea的示例代码,引用是关于HTML中空格的处理和字符实体的使用。 问题中提到的&nbsp;是HTML中表示空格的字符实体。HTML通常会自动截取多余的空格,不管你加多少空格,都被看做一个空格。为了在网页中增加空格,可以使用&nbsp;表示空格。此外,还有其他常用的字符实体,如<表示小于号,>表示大于号,&表示&符号,"表示双引号,等等。 需要注意的是,引用的内容中有一些HTML实体被转义了,所以在描述字符实体时需要参考编码转义后的字符。 根据给定的引用内容,我无法直接回答问题,因为问题中的信息不完整。请提供更具体的问题或补充说明,我将尽力为您提供帮助。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [js+v-html+正则表达式去除所有& nbsp和html标签(& nbsp 换行 )](https://blog.csdn.net/xm_w_xm/article/details/91992754)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [html&nbsp;&nbsp;特殊字符(转)](https://blog.csdn.net/feiniu5566/article/details/13624619)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值