这篇博客要讲的是自定义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的更多相关文章

  1. 如何在pyqt中自定义SwitchButton

    前言 网上有很多 SwitchButton 的实现方式,大部分是通过重写 paintEvent() 来实现的,感觉灵活性不是很好.所以希望实现一个可以联合使用 qss 来更换样式的 SwitchBut ...

  2. Android Tools 开发工具库开源项目总结

    在Android开发中,我们不免会遇到使用一些工具库来简化我们的工具代码的编写,以下是本人之前star的开源项目,供大家参考: 一.android_testsuite 项目地址:https://git ...

  3. 自定义的开关按钮——SwitchButton

    本文转自:http://blog.csdn.net/swust_chenpeng/article/details/19967501 我将原文的控件进行了一些修改,去掉了原来控件的外边框,只留下重要的遮 ...

  4. Android 自定义的开关按钮——SwitchButton

    本文转自:http://blog.csdn.net/swust_chenpeng/article/details/19967501 我将原文的控件进行了一些修改,去掉了原来控件的外边框,只留下重要的遮 ...

  5. SwitchButton 开关按钮 的多种实现方式

    刚开始接触开关样式的按钮是在IOS系统上面,它的切换以及滑动十分帅气,深入人心. 所谓的开关按钮,就是只有2个状态:on和off,下图就是系统IOS 7上开关按钮效果. 起初我在android上我只会 ...

  6. Android 自定义View合集

    自定义控件学习 https://github.com/GcsSloop/AndroidNote/tree/master/CustomView 小良自定义控件合集 https://github.com/ ...

  7. 【转】Android SwitchButton(滑动开关)

    原文网址:http://blog.csdn.net/wangjinyu501/article/details/27961303 版本:1.0 日期:2014.5.17 2014.6.1 版权:© 20 ...

  8. 自定义View-6 状态按钮 滑动 点击

    View public class SwitchButton extends View implements OnClickListener, OnTouchListener {     privat ...

  9. 自定义view-滑动开关

    介绍 前段时间,我看到了一篇关于可滑动开关Switch组件的文章,效果图如下: 思路也挺简单的:这个控件主要由田径场式背景和滑块组成.他将田径场式背景分为3部分,最左边的半圆,中间的两条直线部分和最右 ...

随机推荐

  1. 基于Java的ArrayList和LinkedList的实现与总结

    一.定义MyList接口,包含列表常见方法: import java.util.Iterator; /** * 线性表(列表)的接口定义 */ public interface MyList<T ...

  2. Java软件工程师面试题:Java运行时异常与一般异常有什么不一样?

    异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误.java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕 ...

  3. [Swift]LeetCode152. 乘积最大子序列 | Maximum Product Subarray

    Given an integer array nums, find the contiguous subarray within an array (containing at least one n ...

  4. [Swift]LeetCode655. 输出二叉树 | Print Binary Tree

    Print a binary tree in an m*n 2D string array following these rules: The row number m should be equa ...

  5. python高级-动态特性(20)

    一.动态语⾔的定义 动态语言是在运行时确定数据类型的语言.变量使用之前不需要类型声明,通常变量的类型是被赋值的那个值的类型.现在比较热门的动态语言有:Python.PHP.JavaScript.Obj ...

  6. 前端基本知识(三):JS的闭包理解(第一个思考题有错误,已修改)

    JS闭包的理解 一.变量的作用域 二.如何从外部读取局部变量 三.什么是闭包 四.深入理解闭包 五.闭包的用途 六.使用闭包注意情况 七.JavaScript的垃圾回收机制 八.一些思考题 一.变量作 ...

  7. [Python Web]部署完网站需要做的基本后续工作

    简述 今天自己上线了一个简单的 Page,没有什么功能就是一个展示页. 但是,我发现部署完,上线后,还要弄不少东西.下面就是我记录.整理的一些上线网站基本都会用到的网站和配置. 加入统计代码 这个是必 ...

  8. Java基础6:代码块与代码加载顺序

    更多内容请关注微信公众号[Java技术江湖] 这是一位阿里 Java 工程师的技术小站,作者黄小斜,专注 Java 相关技术:SSM.SpringBoot.MySQL.分布式.中间件.集群.Linux ...

  9. Chapter 5 Blood Type——27

    And then Mike staggered through the door, now supporting a sallow-looking Lee Stephens, another boy ...

  10. Classifying with k-Nearest Neighbors(k近邻)

    终于要开始写自己的第一篇博客啦,真有点小激动(手足无措 =.=!).因为最近正在琢磨机器学习,第一篇博客就从学的第一个算法开始:k-nearest neighbors algorithm即k近邻算法. ...