ToggleButton(开关按钮)是Android系统中比较简单的一个组件,是一个具有选中和未选择状态双状态的按钮,并且需要为不同的状态设置不同的显示文本。下面以一个简单的控制室内设备的开关为例来介绍开关按钮在安卓开发中的使用。
首先,创建一个名为ToggleButtonLib的一个库,用于设置ToggleButton的相关参数,其中部分代码描述如下:

public class ToggleButton extends View{private SpringSystem springSystem;private Spring spring ;/** */private float radius;/** 开启颜色*/private int onColor = Color.parseColor("#4ebb7f");/** 关闭颜色*/private int offBorderColor = Color.parseColor("#dadbda");/** 灰色带颜色*/private int offColor = Color.parseColor("#ffffff");/** 手柄颜色*/private int spotColor = Color.parseColor("#ffffff");/** 边框颜色*/private int borderColor = offBorderColor;/** 画笔*/private Paint paint ;/** 开关状态*/private boolean toggleOn = false;/** 边框大小*/private int borderWidth = 2;/** 垂直中心*/private float centerY;/** 按钮的开始和结束位置*/private float startX, endX;/** 手柄X位置的最小和最大值*/private float spotMinX, spotMaxX;/**手柄大小 */private int spotSize ;/** 手柄X位置*/private float spotX;/** 关闭时内部灰色带高度*/private float offLineWidth;/** */private RectF rect = new RectF();/** 默认使用动画*/private boolean defaultAnimate = true;private OnToggleChanged listener;private ToggleButton(Context context) {super(context);}public ToggleButton(Context context, AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);setup(attrs);}public ToggleButton(Context context, AttributeSet attrs) {super(context, attrs);setup(attrs);}@Overrideprotected void onDetachedFromWindow() {super.onDetachedFromWindow();spring.removeListener(springListener);}public void onAttachedToWindow() {super.onAttachedToWindow();spring.addListener(springListener);}public void setup(AttributeSet attrs) {paint = new Paint(Paint.ANTI_ALIAS_FLAG);paint.setStyle(Style.FILL);paint.setStrokeCap(Cap.ROUND);springSystem = SpringSystem.create();spring = springSystem.createSpring();spring.setSpringConfig(SpringConfig.fromOrigamiTensionAndFriction(50, 7));this.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {toggle(defaultAnimate);}});
TypedArray typedArray =          getContext().obtainStyledAttributes(attrs, R.styleable.ToggleButton);
offBorderColor = typedArray.getColor(R.styleable.ToggleButton_offBorderColor, offBorderColor);
onColor = typedArray.getColor(R.styleable.ToggleButton_onColor, onColor);
spotColor = typedArray.getColor(R.styleable.ToggleButton_spotColor, spotColor);
offColor = typedArray.getColor(R.styleable.ToggleButton_offColor, offColor);
borderWidth = typedArray.getDimensionPixelSize(R.styleable.ToggleButton_borderWidth, borderWidth);
defaultAnimate = typedArray.getBoolean(R.styleable.ToggleButton_animate, defaultAnimate);
typedArray.recycle();
borderColor = offBorderColor;
}public void toggle() {toggle(true);}public void toggle(boolean animate) {toggleOn = !toggleOn;takeEffect(animate);if(listener != null){listener.onToggle(toggleOn);}}

新建一个xml文件用来展示室内控制界面,在当前项目中导入先前创建好的库文件后,布局文件中的部分代码如下:

<LinearLayout android:layout_width="fill_parent"android:layout_height="40dp"android:layout_margin="10dp"android:layout_gravity="center_vertical"android:background="@drawable/corner_bg"><ImageView
                android:id="@+id/imageView1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:src="@drawable/air1" /><TextView
                android:id="@+id/textView1"android:layout_width="80dp"android:layout_height="wrap_content"android:layout_marginLeft="14dp"android:text="西向空调      状态:关闭"android:textSize="15sp" /><com.zcw.togglebutton.ToggleButton
               android:id="@+id/tb1"android:layout_width="54dp"android:layout_height="30dp"android:layout_marginTop="5dp"android:layout_marginLeft="150dp"/></LinearLayout><LinearLayout android:layout_width="fill_parent"android:layout_height="40dp"android:layout_margin="10dp"android:layout_gravity="center_vertical"android:background="@drawable/corner_bg"><ImageView
                android:id="@+id/imageView2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:src="@drawable/air2" /><TextView
                android:id="@+id/textView2"android:layout_width="80dp"android:layout_height="wrap_content"android:layout_marginLeft="14dp"android:text="东向空调      状态:关闭"android:textSize="15sp" /><com.zcw.togglebutton.ToggleButton
               android:id="@+id/tb2"android:layout_width="54dp"android:layout_height="30dp"android:layout_marginTop="5dp"android:layout_marginLeft="150dp"/></LinearLayout><LinearLayout android:layout_width="fill_parent"android:layout_height="40dp"android:layout_margin="10dp"android:layout_gravity="center_vertical"android:background="@drawable/corner_bg"><ImageView
                android:id="@+id/imageView3"android:layout_width="wrap_content"android:layout_height="wrap_content"android:src="@drawable/fan1" /><TextView
                android:id="@+id/textView3"android:layout_width="150dp"android:layout_height="wrap_content"android:layout_marginLeft="14dp"android:text="一号电扇(奥斯牌)      状态:关闭"android:textSize="15sp" /><com.zcw.togglebutton.ToggleButton
               android:id="@+id/tb3"android:layout_width="54dp"android:layout_height="30dp"android:layout_marginTop="5dp"android:layout_marginLeft="80dp"/></LinearLayout>

在其对应的Java文件中通过对开关按钮的控制来达到控制室内设备的开关显示:

public class Home_Air_Control_Activity extends Activity {private com.zcw.togglebutton.ToggleButton tb1;private com.zcw.togglebutton.ToggleButton tb2;private com.zcw.togglebutton.ToggleButton tb3;private TextView tv_state1;private TextView tv_state2;private TextView tv_state3;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_home_air);SysApplication.getInstance().addActivity(this);tb1=(ToggleButton)findViewById(R.id.tb1);tb2=(ToggleButton)findViewById(R.id.tb2);tb3=(ToggleButton)findViewById(R.id.tb3);tv_state1=(TextView)findViewById(R.id.textView1);tv_state2=(TextView)findViewById(R.id.textView2);tv_state3=(TextView)findViewById(R.id.textView3);tb1.setOnToggleChanged(new OnToggleChanged(){public void onToggle(boolean on){if(on){tv_state1.setText("西向空调      状态:开启中");}else{tv_state1.setText("西向空调      状态:关闭");}}});tb2.setOnToggleChanged(new OnToggleChanged(){public void onToggle(boolean on){if(on){tv_state2.setText("东向空调      状态:开启中");}else{tv_state2.setText("东向空调      状态:关闭");}}});tb3.setOnToggleChanged(new OnToggleChanged(){public void onToggle(boolean on){if(on){tv_state3.setText("一号电扇(奥斯牌)      状态:开启中");}else{tv_state3.setText("一号电扇(奥斯牌)      状态:关闭");}}});}
}

最后的显示效果图如下图所示:

安卓开发中ToggleButton按钮的使用相关推荐

  1. 安卓开发中非常炫的效果集合

    安卓开发中非常炫的效果集合 这几天开发的时候,想做一些好看而且酷炫的特效,于是又开始从网上收集各种特效资源.下面给大家一些我喜欢的把,附代码,喜欢的看源代码,然后加到自己项目去把!! 一个开源项目网站 ...

  2. 安卓开发中,release安装包安装后,打开app后再按home键,再次点击程序图标app再次重新启动的解决办法

    安卓开发中,release安装包安装后,打开app后再按home键,再次点击程序图标app再次重新启动的解决办法 在开发中我们一般都是直接AS上的安装(Run)按钮,直接安装到真机或模拟器上进行测试, ...

  3. Android安卓开发中图片缩放讲解

    安卓开发中应用到图片的处理时候,我们通常会怎么缩放操作呢,来看下面的两种做法: 方法1:按固定比例进行缩放 在开发一些软件,如新闻客户端,很多时候要显示图片的缩略图,由于手机屏幕限制,一般情况下,我们 ...

  4. Android Studio安卓开发中使用json来作为网络数据传输格式

    如果你是在安卓开发中并且使用android studio,要使用json来作为数据传输的格式,那么下面是我的一些经验. 一开始我在android studio中导入那6个包,那6个包找了非常久,因为放 ...

  5. 安卓开发中的USB转串口通讯

    安卓开发中的USB转串口通讯 本文使用GitHub上开源的"hoho.android.usbserial"USB串口库.该库基于"Android USB Host API ...

  6. 安卓开发中的重力感应传感器

    2019独角兽企业重金招聘Python工程师标准>>> 安卓开发中拥有多种传感器,google提供了11种传感器供应用层使用:加速度.磁力.方向.陀螺仪.光线.压力(返回当前压强). ...

  7. 豁然开朗篇:安卓开发中关于线程那些事(下篇)

    彻底搞懂线程这一块,看这一篇就够了 前言 本系列详细讲解并发的知识,从基础到底层,让大家彻底搞懂线程和锁的原理,当然里面会涉及到一些内存结构的知识,所以如果为了更好地阅读效果,也可以先去看以下这两篇: ...

  8. 安卓开发中遇到的奇奇怪怪的问题(三)

    本文已授权微信公众号:鸿洋(hongyangAndroid)原创首发. 距离上一篇 安卓开发中遇到的奇奇怪怪的问题(二)又过了半年了,转眼也到年底了,是时候拿出点干货了.这篇算是本年度个人印象最深的几 ...

  9. 豁然开朗篇:安卓开发中关于虚拟机那些事

    彻底搞懂虚拟机这一块,看这一篇就够了 前言 作为豁然开朗篇的最终篇,本文要讲解的是虚拟机这块,因为在之前讲解内存与线程的时候,一直都会牵涉到虚拟机和指令集这块,所以,为了让大家再豁然开朗多一次,本文会 ...

最新文章

  1. Arduino Yun的主要部件介绍选自Arduino Yun快速入门教程
  2. Array Elimination 运算,gcd,思维
  3. Android 动态绘制曲线等各种图形
  4. Simulink中如何定义变量的初始值
  5. ajax-loader.gif不存在怎么解决_高温下水泥路面材料膨胀路面上出现裂缝怎么处理?...
  6. bypass最新版d盾mysql_Bypass D盾_IIS防火墙SQL注入防御(多姿势)
  7. Java虚拟机学习(四)
  8. Servlet初步认识(一)
  9. SQL Server 2008 评估已过期解决方案
  10. 用css美化的简易计算器 |完整代码及注解
  11. b站黑马springCloud-常见面试题,多多三连
  12. NodeJS启动vue项目的坑
  13. sql中简简单单明明白白得使用 with temp as (select x from table1)
  14. The bean sellergoods.FeignClientSpecification could not be registered. A bean with that name has a
  15. 使用airtest刷王者荣耀金币
  16. rm命令删除特定文件或目录或不删除特定文件或目录
  17. 凌云驭势 亚马逊云科技开启re:Invent中国行
  18. swiper 重新初始化
  19. 不情愿的守门人:关于全栈开发者的迷思
  20. Django设置中国时区问题

热门文章

  1. XSS(Cross Site Scripting)攻击简介
  2. qiankun + vue3使用踩坑记录
  3. 计算机方面经典书籍一
  4. SQL 中的 IFNULL和NULLIF
  5. 微软“黑屏”被严重误读
  6. 百度细雨算法2.0详解,规避细雨算法解决方法
  7. QTP工具简单操作使用说明
  8. 【莫烦Python】Matplotlib Python 画图教程 contour等高线图
  9. 龙芯2号处理器,龙芯2K1000芯片参数
  10. Excel 利用histogram统计数据频数