Android 自定义开关控件
2015-07-01 20:03
525 查看
效果图:
![](http://img.blog.csdn.net/20150701192736319?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2preTIwMTQ=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![](http://img.blog.csdn.net/20150701192748125?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2preTIwMTQ=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
使用的图片素材
![](http://img.blog.csdn.net/20150701192826678)
![](http://img.blog.csdn.net/20150701192857094)
![](http://img.blog.csdn.net/20150701192838122)
相关代码如下:
自定义类:WiperSwitch.java
2.调用该类
布局文件:
源码下载:点击打开链接
使用的图片素材
相关代码如下:
自定义类:WiperSwitch.java
package com.android.systemui.keyguard; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Matrix; import android.graphics.Paint; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.View; import android.view.View.OnTouchListener; public class WiperSwitch extends View implements OnTouchListener { private Bitmap bg_on, bg_off, slipper_btn; private float downX, nowX; private boolean onSlip = false; private boolean nowStatus = false; private OnChangedListener listener; public WiperSwitch(Context context) { super(context); init(); } public WiperSwitch(Context context, AttributeSet attrs) { super(context, attrs); init(); } public void init() { bg_on = BitmapFactory.decodeResource(getResources(), R.drawable.on_btn); bg_off = BitmapFactory.decodeResource(getResources(), R.drawable.off_btn); slipper_btn = BitmapFactory.decodeResource(getResources(), R.drawable.white_btn); setOnTouchListener(this); } protected void onDraw(Canvas canvas) { super.onDraw(canvas); Matrix matrix = new Matrix(); Paint paint = new Paint(); float x = 0; if (nowX < (bg_on.getWidth() / 2)) { canvas.drawBitmap(bg_off, matrix, paint); } else { canvas.drawBitmap(bg_on, matrix, paint); } if (onSlip) { if (nowX >= bg_on.getWidth()) x = bg_on.getWidth() - slipper_btn.getWidth() / 2; else x = nowX - slipper_btn.getWidth() / 2; } else { if (nowStatus) { x = bg_on.getWidth() - slipper_btn.getWidth(); } else { x = 0; } } if (x < 0) { x = 0; } else if (x > bg_on.getWidth() - slipper_btn.getWidth()) { x = bg_on.getWidth() - slipper_btn.getWidth(); } canvas.drawBitmap(slipper_btn, x, 0, paint); } @Override public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: { if (event.getX() > bg_off.getWidth() || event.getY() > bg_off.getHeight()) { return false; } else { onSlip = true; downX = event.getX(); nowX = downX; } break; } case MotionEvent.ACTION_MOVE: { nowX = event.getX(); break; } case MotionEvent.ACTION_UP: { onSlip = false; if (event.getX() >= (bg_on.getWidth() / 2)) { nowStatus = true; nowX = bg_on.getWidth() - slipper_btn.getWidth(); } else { nowStatus = false; nowX = 0; } if (listener != null) { listener.OnChanged(WiperSwitch.this, nowStatus); } break; } } invalidate(); return true; } public void setOnChangedListener(OnChangedListener listener) { this.listener = listener; } public void setChecked(boolean checked) { if (checked) { nowX = bg_off.getWidth(); } else { nowX = 0; } nowStatus = checked; } public interface OnChangedListener { public void OnChanged(WiperSwitch wiperSwitch, boolean checkState); } }
2.调用该类
package com.android.systemui.keyguard; import android.app.Activity; import android.os.Bundle; import android.widget.Toast; import com.android.systemui.keyguard.WiperSwitch.OnChangedListener; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); WiperSwitch wiperSwitch = (WiperSwitch)findViewById(R.id.keyguard_setting_app_switch); wiperSwitch.setChecked(true); wiperSwitch.setOnChangedListener(new OnChangedListener() { @Override public void OnChanged(WiperSwitch wiperSwitch, boolean checkState) { // TODO Auto-generated method stub if (checkState) { Toast.makeText(MainActivity.this, "开启",1).show(); }else { Toast.makeText(MainActivity.this, "关闭",1).show(); } } }); } }
布局文件:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" > <RelativeLayout android:layout_width="match_parent" android:layout_height="50dp" > <com.android.systemui.keyguard.WiperSwitch android:id="@+id/keyguard_setting_app_switch" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </RelativeLayout> </RelativeLayout>
源码下载:点击打开链接
相关文章推荐
- android 背景音乐的播放
- Android 获取本机Mac 地址方法及ip地址
- android 学习笔记-3
- Android获取手机的型号和系统版本
- 【OpenSource】【Android】Android优秀开源项目
- 【OpenSource】【Android】Android优秀开源项目
- 【OpenSource】【Android】Android优秀开源项目
- 【OpenSource】【Android】Android优秀开源项目
- 【OpenSource】【Android】Android优秀开源项目
- 【OpenSource】【Android】Android优秀开源项目
- 【OpenSource】【Android】Android优秀开源项目
- Android MVC 实例
- Android wiki:15.读取系统联系人
- Android wiki:14.自定义Toast样式
- Android wiki:14.修改Toast样式
- Android wiki:13.开机启动广播接收者
- Android wiki:12.GestureDetector屏幕手势
- android ListActivity详解
- Android Java 与 C++ 恒调用,路径、文件名、延长的最大长度
- Android wiki:11.translation平称进出动画