折腾了好几天,这个App基本上是完成了,其中有一部分是自定义一个SwitchBar,网上看了好多别人的解决办法,都是基于系统自带的SwitchBar,只是修改了一些背景图片资源什么的,效果并不是很理想,以下是我的解决办法,先贴效果图:

首先是layout中的switchbar.xml文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"android:orientation="vertical"android:layout_width="match_parent"android:layout_height="match_parent"><FrameLayoutandroid:id="@+id/speakerframe"android:layout_width="296px"android:layout_height="100px"android:layout_gravity="center"android:background="@mipmap/btn_frame"android:onClick="onClick"android:layout_marginTop="30dp"android:layout_weight="1"><android.support.v7.widget.AppCompatImageViewandroid:id="@+id/bspeaker"android:layout_width="416px"android:layout_height="match_parent"android:layout_marginEnd="20dp"android:layout_gravity="center"app:srcCompat="@mipmap/btn_slider_n"android:background="@mipmap/btn_state_bspeaker_n" /></FrameLayout><FrameLayoutandroid:id="@+id/lightframe"android:layout_width="296px"android:layout_height="100px"android:layout_gravity="center"android:background="@mipmap/btn_frame"android:onClick="onClick"android:layout_marginTop="30dp"android:layout_weight="1"><android.support.v7.widget.AppCompatImageViewandroid:id="@+id/light"android:layout_width="416px"android:layout_height="match_parent"android:layout_marginEnd="20dp"android:layout_gravity="center"app:srcCompat="@mipmap/btn_slider_n"android:background="@mipmap/btn_state_light_n" /></FrameLayout><android.support.v7.widget.AppCompatImageViewandroid:id="@+id/speed"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center"app:srcCompat="@mipmap/btn_speed_bg"android:layout_weight="10"/></LinearLayout>

基本思想就是btn_frame作为Layout的边框,大小宽度作为Layout的长和宽,(但是,这样做的有明显的缺陷,不同分辨率的手机,屏幕大小不同的手机,显示的大小效果就不同了,后期再想解决办法)将bspeaker作为SpeakerFrame的资源文件,其中bspeaker是由btn_state_bspeaker_n和btn_slider组成的,由于bspeaker的长度大于SpeakerFrame的长度,故表现出的效果就是SwitchBar。(Speaker和Lighjt完全同理,故只解释Speaker)

简言之,组成,当点击事件发生时,改变bspeaker的位置即可。(忽略我截图的大小…)

于是剩下的就是点击事件发生的方法了:

@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.speakerframe:onspeak();break;case R.id.lightframe:onLight();break;default:break;}}int set = 1;private void onLight() {Toast.makeText(this, "点击灯光", Toast.LENGTH_SHORT).show();ImageView lightBar = (ImageView) findViewById(light);FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) lightBar.getLayoutParams();if (set == 1) {params.setMarginStart(120);//其余的相关操作……set = 0;} else {params.setMarginStart(0);set = 1;}lightBar.setLayoutParams(params);}private void onspeak() {Toast.makeText(this, "点击声音", Toast.LENGTH_SHORT).show();ImageView speakBar = (ImageView) findViewById(bspeaker);FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) speakBar.getLayoutParams();if (set == 1) {params.setMarginStart(120);//其余的相关操作……set = 0;} else {params.setMarginStart(0);set = 1;}speakBar.setLayoutParams(params);}

至此,便完成了完全自定义的“SwitchBar”,如果有老铁需要用到拿去用即可,不过,资源只是声音和灯光,如需别的功能,自行P掉即可。另外,这个解决办法其中有很大的问题,就是对于bSpeaker的移动大小,是对我测试的手机适用,若换个尺寸不同或者像素不同的手机,那就会出现偏差,由于只是自己做着玩而不是正规的使用,所以就暂且得过且过了,如果哪位大神有兼容性好的办法,烦请不吝赐教!

Android自制SwitchBar(附资源)相关推荐

  1. 只需十四步:从零开始掌握 Python 机器学习(附资源)

    分享一篇来自机器之心的文章.关于机器学习的起步,讲的还是很清楚的.原文链接在:只需十四步:从零开始掌握Python机器学习(附资源) Python 可以说是现在最流行的机器学习语言,而且你也能在网上找 ...

  2. 从零开始掌握Python机器学习(附资源)

    从零开始掌握Python机器学习(附资源) 机器之心 2017-03-14 14:29 选自kdnuggets 作者:Matthew Mayo Python 可以说是现在最流行的机器学习语言,而且你也 ...

  3. Android语言国际化values资源文件命名规则

    今天,简单讲讲 android 里如何将语言国际化,和各个国家语言的value文件夹的命名规则. 昨天,需要将app的字符资源国际化,可是却不知道如何命名,在网上找了资料,终于解决了问题. Andro ...

  4. android 快速新建字符资源

    今天,简单讲讲如何在android studio快速新建字符资源. 把一个硬编码的字符串放到资源文件中:option + return (Windows / Linux: alt + enter).光 ...

  5. Android Lint 去除重复资源 之 idea探究

    Android Lint是很好的检查工具,可以帮助开发者检查很多问题,其中检查android项目重复的资源文件非常有用. 1.命令行下使用 Android Lint有很多命令,具体可以在网上查到.今天 ...

  6. Android开发 ---如何操作资源目录中的资源文件2

    Android开发 ---如何操作资源目录中的资源文件2 一.颜色资源管理 效果图: 描述: 1.改变字体的背景颜色 2.改变字体颜色 3.改变按钮颜色 4.图像颜色切换 操作描述: 点击(1)中的颜 ...

  7. android中的用户资源访问(一)

    2019独角兽企业重金招聘Python工程师标准>>> 这几天要总结一下android开发中的用户资源访问. android中的用户资源存在项目工程中res文件夹下,有字符串.颜色. ...

  8. Android开发/源码资源汇总

    最全的Android开源音乐播放器源码汇总 http://neast.cn/forum.php?mod=viewthread&tid=9586&fromuid=5 Android 直播 ...

  9. 50个安卓开发者应该熟悉的Android Studio技巧和资源

    原文:50 Android Studio Tips, Tricks & Resources you should be familiar with, as an Android Develop ...

最新文章

  1. php 不可以连接远程mysql数据库
  2. 向web服务器传文件,c++实现向web服务器上传文件
  3. matlab 线性规划_从零开始的matlab学习笔记——(37)线性规划——后传
  4. PingCAP 完成 C 轮 5000 万美元融资,创新型分布式关系型数据库领域最大笔融资
  5. 【知识索引】【C++入门】
  6. 谷歌浏览器连接超时_技术丨常见在线课堂网络连接网络视频播放的解决方案...
  7. 全国网络安全等级保护测评机构推荐目录
  8. 电子科大+矩阵理论+真题总结
  9. c语言缺陷与陷阱,《C语言的缺陷与陷阱》读后总结
  10. Nicholas C. Zakas:我得到的最佳职业生涯建议
  11. Rust之crate
  12. 阿里云服务器ECS装好宝塔 但访问不了面板的解决方法
  13. 板栗花生鸡脚汤——好女人和老火汤同样需要用心品位
  14. 离散数学大作业——C++实现集合的基本运算
  15. 牢记昨天的教训_学习新事物时要牢记的科学支持方法
  16. Markdown在线写作速成
  17. CEC、ARC功能介绍
  18. 提供网上机票实时查询接口
  19. 必须掌握的十个电脑技巧
  20. 阿里技术行丨未来已来新零售技术沙龙报名启动!

热门文章

  1. 自动化监控--zabbix中的Macros(宏)详解
  2. 批量删除文件名中的相同文字
  3. .NET: 使用.NET Core CLI开发应用程序
  4. java设计模式简述
  5. vue-cli安装笔记
  6. mysql转oracle注意事项
  7. 关于align=absmiddle的说明
  8. VOA,with me
  9. linux和android调试概要
  10. mysql web备份软件_Windows下实现MySQL自动备份的批处理(复制目录或mysqldump备份)