这篇博客要讲的是自定义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. Trie树(字典树)的介绍及Java实现

    简介 Trie树,又称为前缀树或字典树,是一种有序树,用于保存关联数组,其中的键通常是字符串.与二叉查找树不同,键不是直接保存在节点中,而是由节点在树中的位置决定.一个节点的所有子孙都有相同的前缀,也 ...

  2. 脚本语言丨Batch入门教程第四章:调用与传参

    今天是Batch入门教程的最后一章内容:调用与传参.相信通过前面的学习,大家已经掌握了Windows Batch有关的基础知识和编程方法,以及利用Windows Batch建立初级的编程思维方式.今后 ...

  3. Android OpenSL ES 开发:Android OpenSL 录制 PCM 音频数据

    一.实现说明 OpenSL ES的录音要比播放简单一些,在创建好引擎后,再创建好录音接口基本就可以录音了.在这里我们做的是流式录音,所以需要用至少2个buffer来缓存录制好的PCM数据,这里我们可以 ...

  4. [Swift]LeetCode496. 下一个更大元素 I | Next Greater Element I

    You are given two arrays (without duplicates) nums1 and nums2 where nums1’s elements are subset of n ...

  5. iFace安全专家揭秘:存放在区块链钱包中的比特币,其实已经早就不属于你……

    自MoreToken钱包跑路之后,2019年3月以来陆续多个钱包.交易所跑路,造成了大量用户账户被盗,仅MoreToken钱包用户损失总价值就达12.2亿人民币,用户损失惨重.为什么这么多钱包.交易所 ...

  6. java 随机数产生 常用类及方法

    1.Random类 Random():创建一个新的随机数生成器. new一个Random类的对象: Random r = new Random(); 利用该对象产生一个随机整数:常用nextInt,不 ...

  7. Java中需要知道的关键字

    Java中有一些或常用,或不常用,但却不得不知关键字,本篇文章将讨论这些关键字的作用. transient transient关键字可能用的不是那么频繁,但却是一个很重要的关键字,它的作用是在对象序列 ...

  8. Redis Windows下安装方法

    一.安装 首先在网上下载Redis,下载地址:https://github.com/MicrosoftArchive/redis/releases 根据电脑系统的实际情况选择32位还是64位,在这里我 ...

  9. 在tomcat中加入SSL腾讯云证书的步骤

    在tomcat中加入SSL证书,可以用https方式访问域名,增加域名的安全性.当然也有很多应用要求https访问,也是安全性的考虑.阿里云和腾讯云都提供SSL证书,还有一些其他的大公司也提供,我这里 ...

  10. spark使用udf给dataFrame新增列

    在 spark 中给 dataframe 增加一列的方法一般使用 withColumn // 新建一个dataFrame val sparkconf = new SparkConf() .setMas ...