android滑动开关控件

初始时是关闭的状态: 

android滑动开关控件   

向右滑动打开: 

android滑动开关控件   

向左滑动关闭: 


滑动控件所用图片: 

android滑动开关控件     sild_bg_on 

android滑动开关控件         sild_bg_off 

android滑动开关控件         sild_bg_btn 


Activity: 
Java代码    收藏代码
  1. package com.amaker.Activity;  
  2.   
  3. import com.amaker.Activity.SlidButton.OnChangedListener;  
  4.   
  5. import android.app.Activity;  
  6. import android.bluetooth.BluetoothAdapter;  
  7. import android.os.Bundle;  
  8. import android.widget.Toast;  
  9.   
  10. public class Android_SlidButtonActivity extends Activity implements OnChangedListener  
  11.       
  12.       
  13.     private BluetoothAdapter adapter;  
  14.       
  15.     @Override  
  16.     public void onCreate(Bundle savedInstanceState)  
  17.         super.onCreate(savedInstanceState);  
  18.         setContentView(R.layout.main);  
  19.           
  20.           
  21.         SlidButton myBtn (SlidButton)findViewById(R.id.slipBtn);  
  22.         myBtn.SetOnChangedListener(this);  
  23.         adapter BluetoothAdapter.getDefaultAdapter();  
  24.      
  25.   
  26.     @Override  
  27.     public void OnChanged(boolean checkState)  
  28.         // TODO Auto-generated method stub  
  29.         if (checkState){  
  30.             //打开蓝牙  
  31.             adapter.enable();  
  32.             Toast.makeText(this"蓝牙打开了。。。"Toast.LENGTH_SHORT).show();  
  33.         }else 
  34.             //关闭蓝牙  
  35.             adapter.disable();  
  36.             Toast.makeText(this"蓝牙关闭了。。。"Toast.LENGTH_SHORT).show();  
  37.          
  38.      
  39.  




自定义滑动控件: 
Java代码    收藏代码
  1. package com.amaker.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. public class SlidButton extends View implements OnTouchListener  
  16.   
  17.     private boolean nowChoose false;// 记录当前按钮是否打开,true为打开,false为关闭  
  18.     private boolean onSlip false;// 记录用户是否在滑动  
  19.     private float downX, nowX; // 按下时的x,当前的x  
  20.     private Rect btn_on, btn_off;// 打开和关闭状态下,游标的Rect  
  21.   
  22.     private boolean isChgLsnOn false;//是否设置监听  
  23.     private OnChangedListener changedLis;  
  24.   
  25.     private Bitmap bg_on, bg_off, slip_btn;  
  26.   
  27.     public SlidButton(Context context, AttributeSet attrs)  
  28.         super(context, attrs);  
  29.         init();  
  30.      
  31.   
  32.     public SlidButton(Context context)  
  33.         super(context);  
  34.         init();  
  35.      
  36.   
  37.       
  38.   
  39.     private void init()  
  40.         // 载入图片资源  
  41.         bg_on BitmapFactory.decodeResource(getResources(),  
  42.                 R.drawable.sild_bg_on);  
  43.         bg_off BitmapFactory.decodeResource(getResources(),  
  44.                 R.drawable.sild_bg_off);  
  45.         slip_btn BitmapFactory.decodeResource(getResources(),  
  46.                 R.drawable.sild_btn);  
  47.         // 获得需要的Rect数据  
  48.         btn_on new Rect(00slip_btn.getWidth(), slip_btn.getHeight());  
  49.         btn_off new Rect(bg_off.getWidth() slip_btn.getWidth(), 0 
  50.                 bg_off.getWidth(), slip_btn.getHeight());  
  51.         setOnTouchListener(this);  
  52.      
  53.       
  54.       
  55.     @Override  
  56.     protected void onDraw(Canvas canvas)  
  57.         // TODO Auto-generated method stub  
  58.         super.onDraw(canvas);  
  59.           
  60.         Matrix matrix new Matrix();  
  61.         Paint paint new Paint();  
  62.         float x;  
  63.           
  64.          
  65.             if (nowX<(bg_on.getWidth()/2)) //滑动到前半段与后半段的背景不同,在此做判断  
  66.                 canvas.drawBitmap(bg_off, matrix, paint);//画出关闭时的背景  
  67.             else  
  68.                 canvas.drawBitmap(bg_on, matrix, paint);//画出打开时的背景   
  69.                   
  70.             if (onSlip) {//是否是在滑动状态,    
  71.                 if(nowX >= bg_on.getWidth())//是否划出指定范围,不能让游标跑到外头,必须做这个判断  
  72.                     bg_on.getWidth() slip_btn.getWidth()/2;//减去游标1/2的长度  
  73.                 else  
  74.                     nowX slip_btn.getWidth()/2 
  75.             }else  
  76.                 if(nowChoose)//根据现在的开关状态设置画游标的位置   
  77.                     btn_off.left;  
  78.                 else  
  79.                     btn_on.left;  
  80.              
  81.               
  82.             if (x 0 //对游标位置进行异常判断..  
  83.                 0 
  84.             else if(x bg_on.getWidth() slip_btn.getWidth())  
  85.                 bg_on.getWidth() slip_btn.getWidth();  
  86.               
  87.             canvas.drawBitmap(slip_btn, x,0paint);//画出游标.     
  88.          
  89.      
  90.   
  91.     @Override  
  92.     public boolean onTouch(View v, MotionEvent event)  
  93.           
  94.         switch (event.getAction()) {//根据动作来执行代码  
  95.               
  96.             case MotionEvent.ACTION_MOVE://滑动  
  97.                 nowX event.getX();  
  98.                 break 
  99.             case MotionEvent.ACTION_DOWN://按下  
  100.                 if (event.getX() bg_on.getWidth() || event.getY() bg_on.getHeight())   
  101.                     return false 
  102.                 onSlip true 
  103.                 downX event.getX();  
  104.                 nowX downX;  
  105.                 break 
  106.             case MotionEvent.ACTION_UP://松开  
  107.                 onSlip false 
  108.                 boolean lastChoose nowChoose;  
  109.                 if (event.getX() >= (bg_on.getWidth()/2))   
  110.                     nowChoose true 
  111.                 else   
  112.                     nowChoose false 
  113.                 if(isChgLsnOn && (lastChoose != nowChoose))//如果设置了监听器,就调用其方法.  
  114.                     changedLis.OnChanged(nowChoose);  
  115.                 break 
  116.             default 
  117.                 break 
  118.          
  119.         invalidate();  
  120.         return true 
  121.      
  122.   
  123.       
  124.     public void SetOnChangedListener(OnChangedListener l){//设置监听器,当状态修改的时候  
  125.         isChgLsnOn true 
  126.         changedLis l;  
  127.      
  128.       
  129.     public interface OnChangedListener  
  130.         abstract void OnChanged(boolean checkState);  
  131.      
  132.  
main.xml 
Java代码   " quality="high" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer">  收藏代码
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:layout_width="fill_parent"  
  4.     android:layout_height="fill_parent"  
  5.     android:orientation="vertical"   
  6.     android:background="#FFFFFF" 
  7.   
  8.     <LinearLayout   
  9.         android:orientation="horizontal"  
  10.         android:layout_width="fill_parent"  
  11.         android:layout_height="wrap_content"  
  12.         android:padding="30dp" 
  13.           
  14.         <TextView   
  15.             android:text="蓝牙"  
  16.             android:layout_width="wrap_content"  
  17.             android:layout_height="wrap_content"  
  18.             android:textColor="#000000"  
  19.             android:textSize="20sp"/>  
  20.         <com.amaker.Activity.SlidButton   
  21.             android:id="@+id/slipBtn"  
  22.             android:layout_width="wrap_content"  
  23.             android:layout_height="wrap_content"  
  24.             android:layout_marginLeft="100dp"/>  
  25.     </LinearLayout>  
  26.   
  27. </LinearLayout>  


最后AndroidManifest.xml,一定要注意加上蓝牙的权限 
Java代码   " quality="high" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer">  收藏代码
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     package="com.amaker.Activity"  
  4.     android:versionCode="1"  
  5.     android:versionName="1.0"  
  6.   
  7.     <uses-sdk android:minSdkVersion="8" />  
  8.   
  9.     <uses-permission android:name="android.permission.BLUETOOTH" />   
  10.     <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />  
  11.       
  12.     <application  
  13.         android:icon="@drawable/ic_launcher"  
  14.         android:label="@string/app_name"  
  15.         <activity  
  16.             android:name=".Android_SlidButtonActivity"  
  17.             android:label="@string/app_name"  
  18.             <intent-filter>  
  19.                 <action android:name="android.intent.action.MAIN" />  
  20.   
  21.                 <category android:name="android.intent.category.LAUNCHER" />  
  22.             </intent-filter>  
  23.         </activity>  
  24.     </application>  
  25.   
  26. </manifest>  
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值