时间:2015-07-20 来源:

android自定义开关控件 【移动开发】

近日在android项目要使用开关控件符合w3c标准,但是android中自带的开关控件不太满意,符合w3c标准所以就打算通过自定义View写一个开关控件

 开关控件,html切图中包含了两个部分,jpg或psd转html一个是一个圆,网页切图价格一个是圆角矩形,手机前端外包好了那我们只要通过view来进行绘制这两部分就可以了

关键点:

源码下载

<com.example.widget.SwitchbuttonView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/am_sbv" /> private SwitchbuttonView am_sbv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); am_sbv = (SwitchbuttonView) findViewById(R.id.am_sbv); //为开关控件设置点击的回调事件 am_sbv.setOnToggleStateChangeListener(new OnToggleStateChangeListener(){ @Override public void onToggleStateChange(boolean b) { if(b){ Log.i("State",开"); }else{ Log.i("State",关"); } } }); }ok,这样一个自定义的开关空间就完成了,符合w3c标准同志们如果有问题可以提出来网页外包接活,讨论一下

    1. 我们在自定义view的时候,网页外包接活使用的坐标都是我们当前的view视图的web前端制作,不是相对于整个屏幕的

直接上代码:

通过上面的代码我的自定义控件就建立了,div+css制作然后就可以在界面中使用承接网页制作,这里要注意的是我们在activity要对该控件设置回调事件,承接网页制作具体使用方式:

  

先上图:

版权声明:本文为博主原创文章web切图报价,未经博主允许不得转载.

ios的开关控件当然就是我要仿照的目标.

分析:

欢迎转载....

    2. 绘制自定义view关键点就是绘制(onDraw)和确定控件的大小(onMeasure)

package com.example.widget; import com.example.switchbutton_master.R; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.RectF; import android.util.AttributeSet; import android.util.Log; import android.view.MotionEvent; import android.view.View; import android.widget.Toast; //自定义开关控件 public class SwitchbuttonView extends View{ //开关圆圈的按钮 private Bitmap swithSilder; //获取的开关圆圈的宽度 private int swithWidth; //开关圆圈在x轴上的位置 private int swithShilerX; //在轻微调整大小的长度 private int baseHeight; private int baseWidth; //开关控件当前的状态,web切图报价true:开符合w3c标准, AttributeSet attrs) { super(context, R.drawable.swich_slider_new); swithWidth = swithSilder.getWidth(); baseHeight = swithWidth / 10; baseWidth = swithWidth / 5; paint = new Paint(); //初始画笔的样式没不填充 paint.setStyle(Paint.Style.STROKE); //画笔颜色为灰色 paint.setColor(Color.parseColor("#D3D1D1")); // 去锯齿 paint.setAntiAlias(true); //设置笔的颜色 paint.setStrokeWidth(2); //设置开关圆圈的x轴位置 swithShilerX = -3; } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); //canvas.drawColor(Color.WHITE); //绘制开关的按钮 //绘制一个圆角的矩形web前端制作,0, swithWidth - baseHeight); canvas.drawRoundRect(re3, swithWidth/2, paint); //在绘制一个控制按钮的图片,符合w3c标准x轴为-3,swithShilerX, null); } @Override protected void onMeasure(int widthMeasureSpec, heightMeasureSpec); //设置控件的大小为开关圆圈的大小web切图报价,必须设置,网站div+css不然没有办法计算当前组件的时间大小 setMeasuredDimension(swithWidth*2 - baseWidth, currentState+""); if(currentState){ //设置所绘制矩形的状态 paint.setStyle(Paint.Style.FILL); //填充 paint.setColor(Color.GREEN); //绿色 //设置开关圆圈的位置 swithShilerX = swithWidth - baseHeight - 3; }else{ paint.setStyle(Paint.Style.STROKE); //不填充 paint.setColor(Color.parseColor("#D3D1D1")); //灰色 swithShilerX = -3; } //调用回调方法网页外包接活,传递当前的状态 mListener.onToggleStateChange(currentState); break; } invalidate(); // 刷新控件,网页外包接活该方法会调用onDraw(Canvas canvas)方法 return true; // 自己处理事件web前端制作,不让父类负责消耗事件 } /** * 对外设置监听方法 * @param listener */ public void setOnToggleStateChangeListener(OnToggleStateChangeListener listener) { this.mListener = listener; } //用于进行设置当开关的状态发生改变是同时上层调用这进行的处理操作 public interface OnToggleStateChangeListener{ /** * 当开关状态改变回调此方法 * 当前开关的最新状态 */ void onToggleStateChange(boolean b); } }

点击次数:4727
作者:
web前端行业资讯
Web new NewsList
英特尔宣布与法拉利跨界合作欲将AI技术用于赛车运动 ,,2018年01月11日甲骨文服务器出漏洞:攻击者用漏洞挖矿获取加密货币 ,,2018年01月11日用深度学习设计图像视频压缩算法:更简洁、更强大 ,,2018年01月11日Ubuntu内核和NVIDIA更新:修复Meltdown和Spectre两处漏洞 ,,2018年01月11日AntDesign3.1.1发布,阿里企业级UI设计语言 ,,2018年01月11日微信「跳一跳」带火小游戏,开发者如何快速上手? ,,2018年01月11日谷歌公布最新安卓系统份额:你用上奥利奥了么? ,,2018年01月11日腾讯开发出“3D音效”算法:普通耳机实现3D实时语音效果 ,,2018年01月11日谷歌工程师点赞中国程序员实现Node.js启动超4倍提速 ,,2018年01月11日三星电子总裁兼CE部门负责人金炫奭:万物互联时代到来 ,,2018年01月11日NVIDIA和大众合作建立智能驾驶助手 ,,2018年01月11日GIMPS项目报告发现已知最大素数 ,,2018年01月11日微软与生物技术公司开展AI驱动的血液检测同时诊断数十种疾病 ,,2018年01月11日微软跨平台移动开发工具套件HockeyApp宣布免费 ,,2018年01月11日《硅谷》里神乎其神的压缩技术,AI正在一点点做出来 ,,2018年01月11日LinuxMint19代号敲定为“Tara”预计2018年5月至6月期间发布 ,,2018年01月11日Facebook发布wav2letter工具包,用于端到端自动语音识别 ,,2018年01月11日开源数据库ArangoDB正进行约1156万美元股权融资 ,,2018年01月11日IntelCPU漏洞闹大:腾讯云紧急升级 ,,2018年01月11日2018年1月全球数据库排名:Redis夺回第八 ,,2018年01月11日Lyft将联手无人驾驶公司于CES上展示无人驾驶汽车 ,,2018年01月11日京东X无人超市首家社会门店开业:刷脸进、微信自动结算 ,,2018年01月11日担心被AI取代是杞人忧天?高晓松跨年演讲说的有几分对 ,,2018年01月11日免费授权技术许可Intel宣布在未来CPU中集成雷电3 ,,2018年01月11日算法决定你在社交媒体上看到的信息 ,,2018年01月11日谷歌安全博客披露“英特尔内核漏洞”更多细节 ,,2018年01月04日Postgres10开发者新特性 ,,2017年12月28日阿里巴巴、狗尾草、苏大联合论文:基于对抗学习的众包标注用于中文命名实体识别 ,,2017年12月28日柯洁的2017:20岁,与AI斗与人类斗,其乐无穷 ,,2017年12月28日如果机器人拥有痛觉,这个世界会有哪些不一样? ,,2017年12月28日倦眉赋【互联网】2014年12月16日UISearchBar的使用以及下拉列表框的实现 【移动开发】2015年04月13日Oracledatabasewrc执行报错ORA-15557【云计算】2015年07月20日mac开启多个eclipseQQ 【综合】2015年01月29日友情链接的寻找策略和标准以及真假链接判2014年01月28日WIN2000的输入法入侵2014年01月29日网络编程(3)——初探HTTP协议 【移动开发】2015年02月28日MongoDB的Python接口PyMongo 1,收藏 ,,2016年06月29日让你受益终生的15个饮食习惯2014年01月29日NYOJ113字符串替换(C++STL解法)【编程语言】2015年07月20日苹果果然正在开发AR原型产品而且还不止一款 ,,2017年08月10日常用Linux命令 【编程语言】2015年08月03日语法着色工具,Highlight3.10发布 ,,2016年06月23日hdu1005NumberSequence 【综合】2014年11月19日Flex开发实战(一)--Flex的详细介绍 【移动开发】2015年06月25日内部类简析【移动开发】2015年02月09日中国移动G3汽球Logo欣赏(打包下载)2014年01月28日JavaScript:undefinedAndnull区别 【移动开发】2014年11月04日SpringDataMongoDB实战(上) 【编程语言】2015年08月27日浅析游戏引擎的资源管理机制——扒一扒Unity3D中隐藏在背后的资源管理 【编程语言】2015年03月18日QUARTZ.NET一个定时任务框架【综合】2015年03月30日调用opencv的detectMultiScale函数时报错【编程语言】2014年11月26日【SSH进阶之路】Spring的IOC逐层深入——为什么要使用IOC【实例讲解】(二) 【编程语言】2015年01月24日Spring学习总结(2.2)-SpringMVC:DispatcherServlet【编程语言】2015年06月01日JS文件压缩工具,rJSmin1.0.4发布 ,,2016年06月23日Android启动浏览器的方法 【编程语言】2015年01月20日Python的ORM框架,SQLAlchemy0.8发布 ,,2016年06月23日winXP家庭home版安装IIS的方法2014年01月29日堆排序分析及优化【编程语言】2015年04月13日分布式网络爬虫Nutch中文教程nutcher(JAVA)2015年07月27日
我们保证
We guarantee
> psd效果文件手工切图,保证图片效果最好体积最小利于传输
> 100%手写的HTML(DIV+CSS)编码,绝对符合W3C标准
> 代码精简、css沉余量小、搜索引擎扫描迅速,网页打开快捷
> 应用Css Sprite能够减少HTTP请求数,提高网页性能
> 跨浏览器兼容(IE6、7、8、9,Firefox火狐,Chrome谷歌)