自定义switchButton
这篇博客要讲的是自定义switchButton,不过没有设置动画效果。
我用GradientDrawable来绘制switchButton,我们先看看最终的效果:
点击前:

点击后

接下来我们看看如何实现
首先:该类继承RelativeLayout
SwitchButton extends RelativeLayout{
}
该类需要用到的成员:
private ImageView track; //滑块所在的轨道
private ImageView slider; //switchButton上面的滑块 private GradientDrawable trackDrawable; //用于绘制轨道
private GradientDrawable sliderDrawable; //用于绘制滑块 private LayoutParams trackLy; //轨道的布局
private LayoutParams sliderLy; //滑块的布局 private boolean isCkeck = false; //是否点击
构造方法:
public SwitchButton(Context context) {
super(context);
init();
}
public SwitchButton(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
private void init(){
setClickable(true);
setLayoutParams(new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT));
track = new ImageView(getContext());
slider = new ImageView(getContext());
trackLy = new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT);
trackLy.addRule(CENTER_VERTICAL);
sliderLy = new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT);
sliderLy.addRule(CENTER_VERTICAL);
track.setLayoutParams(trackLy);
slider.setLayoutParams(sliderLy);
trackDrawable = new GradientDrawable();
sliderDrawable = new GradientDrawable();
//轨道的形状,颜色,大小,边缘,角度
trackDrawable.setShape(GradientDrawable.RECTANGLE);
trackDrawable.setColor(getResources().getColor(R.color.white_FFFFFFFF));
trackDrawable.setSize(getResources()
.getDimensionPixelOffset(R.dimen.track_width),
getResources().getDimensionPixelOffset(R.dimen.track_height));
trackDrawable.setStroke(getResources()
.getDimensionPixelOffset(R.dimen.switch_button_stroke),
getResources().getColor(R.color.gray));
trackDrawable.setCornerRadius(getResources()
.getDimension(R.dimen.switch_button_cornerRadius));
//设置滑块的形状,颜色,大小,边缘,角度
sliderDrawable.setShape(GradientDrawable.OVAL);
sliderDrawable.setColor(getResources().getColor(R.color.white_FFFFFFFF));
sliderDrawable.setSize(getResources()
.getDimensionPixelOffset(R.dimen.slider_size),
getResources().getDimensionPixelOffset(R.dimen.slider_size));
sliderDrawable.setStroke(getResources()
.getDimensionPixelOffset(R.dimen.switch_button_stroke),
getResources().getColor(R.color.gray));
//设置给imageView
track.setImageDrawable(trackDrawable);
slider.setImageDrawable(sliderDrawable);
addView(track);
addView(slider);
setOnClickListener(this);
}
设置点击事件
@Override
public void onClick(View view) {
if (isCkeck)
{
isCkeck = false;
}else {
isCkeck = true;
}
setCheck(isCkeck);
}
private void setCheck(boolean isCheck){
if (isCheck){
//轨道变为蓝色
trackDrawable.setColor(getResources().getColor(R.color.blue));
//注意这里进行版本判断。if与else里面代码的效果是相同的,只是有些代码在某些版本下才能够用
if (Build.VERSION.SDK_INT >= 17) {
sliderLy.addRule(ALIGN_PARENT_END);
//设置新的布局之前,要先移除之前的布局,否则会有叠加的效果
sliderLy.removeRule(ALIGN_PARENT_START);
} else {
sliderLy.addRule(ALIGN_PARENT_RIGHT);
sliderLy.addRule(ALIGN_PARENT_LEFT,0);
}
slider.setLayoutParams(sliderLy);
}else {
trackDrawable.setColor(getResources().getColor(R.color.white_FFFFFFFF));
if (Build.VERSION.SDK_INT >= 17) {
sliderLy.removeRule(ALIGN_PARENT_END);
sliderLy.addRule(ALIGN_PARENT_START);
} else {
sliderLy.addRule(ALIGN_PARENT_RIGHT,0);
sliderLy.addRule(ALIGN_PARENT_LEFT);
}
slider.setLayoutParams(sliderLy);
}
}
以上便是所有的代码。
请尊重劳动成果,转载请标明出处:http://www.cnblogs.com/tangZH/p/8277428.html
自定义switchButton的更多相关文章
- 如何在pyqt中自定义SwitchButton
前言 网上有很多 SwitchButton 的实现方式,大部分是通过重写 paintEvent() 来实现的,感觉灵活性不是很好.所以希望实现一个可以联合使用 qss 来更换样式的 SwitchBut ...
- Android Tools 开发工具库开源项目总结
在Android开发中,我们不免会遇到使用一些工具库来简化我们的工具代码的编写,以下是本人之前star的开源项目,供大家参考: 一.android_testsuite 项目地址:https://git ...
- 自定义的开关按钮——SwitchButton
本文转自:http://blog.csdn.net/swust_chenpeng/article/details/19967501 我将原文的控件进行了一些修改,去掉了原来控件的外边框,只留下重要的遮 ...
- Android 自定义的开关按钮——SwitchButton
本文转自:http://blog.csdn.net/swust_chenpeng/article/details/19967501 我将原文的控件进行了一些修改,去掉了原来控件的外边框,只留下重要的遮 ...
- SwitchButton 开关按钮 的多种实现方式
刚开始接触开关样式的按钮是在IOS系统上面,它的切换以及滑动十分帅气,深入人心. 所谓的开关按钮,就是只有2个状态:on和off,下图就是系统IOS 7上开关按钮效果. 起初我在android上我只会 ...
- Android 自定义View合集
自定义控件学习 https://github.com/GcsSloop/AndroidNote/tree/master/CustomView 小良自定义控件合集 https://github.com/ ...
- 【转】Android SwitchButton(滑动开关)
原文网址:http://blog.csdn.net/wangjinyu501/article/details/27961303 版本:1.0 日期:2014.5.17 2014.6.1 版权:© 20 ...
- 自定义View-6 状态按钮 滑动 点击
View public class SwitchButton extends View implements OnClickListener, OnTouchListener { privat ...
- 自定义view-滑动开关
介绍 前段时间,我看到了一篇关于可滑动开关Switch组件的文章,效果图如下: 思路也挺简单的:这个控件主要由田径场式背景和滑块组成.他将田径场式背景分为3部分,最左边的半圆,中间的两条直线部分和最右 ...
随机推荐
- 【安富莱专题教程第5期】工程调试利器RTT实时数据传输组件,替代串口调试,速度飞快,可以在中断和多任务中随意调用
说明:1.串口作为经典的调试方式已经存在好多年了,缺点是需要一个专门的硬件接口.现在有了SEGGER的RTT(已经发布有几年了),无需占用系统额外的硬件资源,而且速度超快,是替代串口调试的绝佳方式.2 ...
- navicat实现Mysql数据备份
方法/步骤 使用navicat工具连接mysql数据库,这里以navicat for Mysql工具为例.如果数据库在本机,那么连接ip处写localhost即可,如果数据库在其他机器,那需要 ...
- LeetCode题解38.Count and Say
38. Count and Say The count-and-say sequence is the sequence of integers beginning as follows: 1, 11 ...
- [Swift]LeetCode230. 二叉搜索树中第K小的元素 | Kth Smallest Element in a BST
Given a binary search tree, write a function kthSmallest to find the kth smallest element in it. Not ...
- python获取当前运行程序的名字
import os filename = os.path.abspath(__file__) print filename 打印结果: E:\bluedon\test.py
- Hadoop源码篇--Reduce篇
一.前述 Reduce文件会从Mapper任务中拉取很多小文件,小文件内部有序,但是整体是没序的,Reduce会合并小文件,然后套个归并算法,变成一个整体有序的文件. 二.代码 ReduceTask源 ...
- 利用Grafana展示zabbix数据
一.系统搭建(以Centos7为例)因为我们的主要目的是展示zabbix的数据,所以建议大家直接在zabbix的服务器上搭建这个系统,亲测两系统无冲突,这样部署的好处是两系统间的数据传输更快,前端展示 ...
- redis 系列10 字符串对象
一. 字符串对象编码 Redis中字符串可以存储3种类型,分别是字节串(byte string).整数.浮点数.在上章节中讲到字符串对象的编码可以是int, raw,embstr. 如果一个字符串对象 ...
- VS 2013 professional版在win10上安装出错的解决方法
VS 2013 professional版在win10上安装出错的解决方法 win10上安装完VS 2012 professional和VS 2017 professional后,由于项目的需要,要在 ...
- 淘宝npm镜像使用方法(转)
1.临时使用 npm --registry https://registry.npm.taobao.org install express 2.持久使用 npm config set registry ...