首页 android自定义滑动开关控件适合所有的android系统

android自定义滑动开关控件适合所有的android系统

举报
开通vip

android自定义滑动开关控件适合所有的android系统android自定义滑动开关控件,适合所有的android系统 我们都知道Android4.0以上才带有滑动开关Switch,那么在4.0以下呢,很多人会选择用CheckBox,放两张图片,但是这样子只能点击,效果不太好,所以我就自定义了滑动开关WiperSwitch这么一个控件,下面先把截图贴上吧,这蹩脚的图片真戳啊,大家可以自己换三张图片[java] view plaincopypackage com.example.wiperswitch; import android.content.Context; ...

android自定义滑动开关控件适合所有的android系统
android自定义滑动开关控件,适合所有的android系统 我们都知道Android4.0以上才带有滑动开关Switch,那么在4.0以下呢,很多人会选择用CheckBox,放两张图片,但是这样子只能点击,效果不太好,所以我就自定义了滑动开关WiperSwitch这么一个控件,下面先把截图贴上吧,这蹩脚的图片真戳啊,大家可以自己换三张图片[java] view plaincopypackage com.example.wiperswitch; 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; /** * * @author xiaanming * */ public class WiperSwitch extends View implements OnTouchListener{ private Bitmap bg_on, bg_off, slipper_btn; /** * 按下时的x和当前的x */ 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; //根据nowX设置背景,开或者关状态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;//减去滑块1/2的长度else x = nowX - slipper_btn.getWidth()/2; }else { if(nowStatus){//根据当前的状态设置滑块 的x值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(WiperSwitc h.this, nowStatus); } break; } } //刷新界面invalidate(); return true; } /** * 为WiperSwitch设置一个监听,供外部调用的 方法 快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载 * @param listener */ public void setOnChangedListener(OnChangedListener listener){ this.listener = listener; } /** * 设置滑动开关的初始状态,供外部调用* @param checked */ public void setChecked(boolean checked){ if(checked){ nowX = bg_off.getWidth(); }else{ nowX = 0; } nowStatus = checked; } /** * 回调接口* @author len * */ public interface OnChangedListener { public void OnChanged(WiperSwitch wiperSwitch, boolean checkState); } } 用法是,先定义XML文件[html] view plaincopy 新建一个Activity[java] view plaincopypackage com.example.wiperswitch; import android.app.Activity; import android.os.Bundle; import android.util.Log; import com.example.wiperswitch.WiperSwitch.OnChangedListen er; public class MainActivity extends Activity implements OnChangedListener { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //实例化WiperSwitch WiperSwitch wiperSwitch = (WiperSwitch)findViewById(R.id.wiperSwitch1); //设置初始状态为false wiperSwitch.setChecked(false); //设置监听 wiperSwitch.setOnChangedListener(this); } @Override public void OnChanged(WiperSwitch wiperSwitch, boolean checkState) { Log.e("log", "" + checkState); } } 代码全部上完了,写的不好的地方欢迎大牛指点!哦,忘记了还有三张蹩脚的图片没传
本文档为【android自定义滑动开关控件适合所有的android系统】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_635022
暂无简介~
格式:doc
大小:21KB
软件:Word
页数:0
分类:互联网
上传时间:2019-08-27
浏览量:17