Android自制SwitchBar(附资源)
折腾了好几天,这个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(附资源)相关推荐
- 只需十四步:从零开始掌握 Python 机器学习(附资源)
分享一篇来自机器之心的文章.关于机器学习的起步,讲的还是很清楚的.原文链接在:只需十四步:从零开始掌握Python机器学习(附资源) Python 可以说是现在最流行的机器学习语言,而且你也能在网上找 ...
- 从零开始掌握Python机器学习(附资源)
从零开始掌握Python机器学习(附资源) 机器之心 2017-03-14 14:29 选自kdnuggets 作者:Matthew Mayo Python 可以说是现在最流行的机器学习语言,而且你也 ...
- Android语言国际化values资源文件命名规则
今天,简单讲讲 android 里如何将语言国际化,和各个国家语言的value文件夹的命名规则. 昨天,需要将app的字符资源国际化,可是却不知道如何命名,在网上找了资料,终于解决了问题. Andro ...
- android 快速新建字符资源
今天,简单讲讲如何在android studio快速新建字符资源. 把一个硬编码的字符串放到资源文件中:option + return (Windows / Linux: alt + enter).光 ...
- Android Lint 去除重复资源 之 idea探究
Android Lint是很好的检查工具,可以帮助开发者检查很多问题,其中检查android项目重复的资源文件非常有用. 1.命令行下使用 Android Lint有很多命令,具体可以在网上查到.今天 ...
- Android开发 ---如何操作资源目录中的资源文件2
Android开发 ---如何操作资源目录中的资源文件2 一.颜色资源管理 效果图: 描述: 1.改变字体的背景颜色 2.改变字体颜色 3.改变按钮颜色 4.图像颜色切换 操作描述: 点击(1)中的颜 ...
- android中的用户资源访问(一)
2019独角兽企业重金招聘Python工程师标准>>> 这几天要总结一下android开发中的用户资源访问. android中的用户资源存在项目工程中res文件夹下,有字符串.颜色. ...
- Android开发/源码资源汇总
最全的Android开源音乐播放器源码汇总 http://neast.cn/forum.php?mod=viewthread&tid=9586&fromuid=5 Android 直播 ...
- 50个安卓开发者应该熟悉的Android Studio技巧和资源
原文:50 Android Studio Tips, Tricks & Resources you should be familiar with, as an Android Develop ...
最新文章
- php 不可以连接远程mysql数据库
- 向web服务器传文件,c++实现向web服务器上传文件
- matlab 线性规划_从零开始的matlab学习笔记——(37)线性规划——后传
- PingCAP 完成 C 轮 5000 万美元融资,创新型分布式关系型数据库领域最大笔融资
- 【知识索引】【C++入门】
- 谷歌浏览器连接超时_技术丨常见在线课堂网络连接网络视频播放的解决方案...
- 全国网络安全等级保护测评机构推荐目录
- 电子科大+矩阵理论+真题总结
- c语言缺陷与陷阱,《C语言的缺陷与陷阱》读后总结
- Nicholas C. Zakas:我得到的最佳职业生涯建议
- Rust之crate
- 阿里云服务器ECS装好宝塔 但访问不了面板的解决方法
- 板栗花生鸡脚汤——好女人和老火汤同样需要用心品位
- 离散数学大作业——C++实现集合的基本运算
- 牢记昨天的教训_学习新事物时要牢记的科学支持方法
- Markdown在线写作速成
- CEC、ARC功能介绍
- 提供网上机票实时查询接口
- 必须掌握的十个电脑技巧
- 阿里技术行丨未来已来新零售技术沙龙报名启动!