个人感觉Tablayout里的indicator左右滑动和摩拜单车里按钮背景左右滑动很像,所以我的思路是修改Tablayout里indicator的位置和形状,把indicator的位置放在tab下面,并且修改indicator的形状为圆角矩形,那接下来就是具体实现啦

我采用的方法是改写material design下TabLayout的源码,修改的地方只有两处,都位于TabLayout内部类

SlidingTabStrip 中

1、修改animateIndicatorToPosition()里的代码,这里主要处理按钮的背景左右移动的动画,
if (Math.abs(position - mSelectedPosition) <= 1) {// If the views are adjacent, we'll animate from edge-to-edge
    startLeft = mIndicatorLeft;startRight = mIndicatorRight;
} else {// Else, we'll just grow from the nearest edge
    final int offset = dpToPx(MOTION_NON_ADJACENT_OFFSET);if (position < mSelectedPosition) {// We're going end-to-start
        if (isRtl) {startLeft = startRight = targetLeft - offset;} else {startLeft = startRight = targetRight + offset;}} else {// We're going start-to-end
        if (isRtl) {startLeft = startRight = targetRight + offset;} else {startLeft = startRight = targetLeft - offset;}}
}
把以上这段代码浓缩成
2.修改draw()方法里的代码,这里主要修改左右滑动背景的位置和形状
代码如下
@Override
public void draw(Canvas canvas) {// Thick colored underline below the current selection
    if (mIndicatorLeft >= 0 && mIndicatorRight > mIndicatorLeft) {/*canvas.drawRect(mIndicatorLeft, getHeight() - mSelectedIndicatorHeight,
                mIndicatorRight, getHeight(), mSelectedIndicatorPaint);*/
        int tabHeight=getChildAt(0).getHeight();// getHeight()-tabHeight+10;
        RectF oval3 = new RectF(mIndicatorLeft+50, getHeight()-tabHeight+30,mIndicatorRight-50, getHeight()-30);// 设置个新的长方形
        canvas.drawRoundRect(oval3, 60, 45, mSelectedIndicatorPaint);}super.draw(canvas);}
besides,mSelectedIndicatorPaint这个画笔必须加上抗锯齿属性

这样改完之后
setSelectedIndicatorHeight()设置indicator高度的方法就失效了,不过indicator的高度可以在draw里自己定义
来个效果图:
当然这种实现方法的缺点也有两个
1.要把tablayout以及相关类的源码复制出来,比较麻烦
2.无形中又多了好多个类啊,对APK大小敏感的同志慎用
mSelectedIndicatorPaint.setAntiAlias(true);
startLeft = mIndicatorLeft;
startRight = mIndicatorRight;  
其余的都不要了

Android模仿摩拜单车车型选择按钮相关推荐

  1. android 滑动接听源码,android仿摩拜单车APP、炫酷RecyclerView、卡片滑动、仿饿了么点餐、自定义索引等源码...

    Android精选源码 Android优质博客 前言permissions4m 最初的设计是仅仅做成一个编译器注解框架,在1.0.0版本时,它纯粹地实现了原生 Android 请求流程,关于它的设计思 ...

  2. android 卡片上滑放大,android仿摩拜单车APP、炫酷RecyclerView、卡片滑动、仿饿了么点餐、自定义索引等源码...

    Android精选源码 Android优质博客 前言permissions4m 最初的设计是仅仅做成一个编译器注解框架,在1.0.0版本时,它纯粹地实现了原生 Android 请求流程,关于它的设计思 ...

  3. Android百度地图实例详解之仿摩拜单车APP(包括附近车辆、规划路径、行驶距离、行驶轨迹记录,导航等)

    Android百度地图实例详解之仿摩拜单车APP(包括附近车辆.规划路径.行驶距离.行驶轨迹记录,导航等) 标签: android百度地图行驶轨迹记录共享单车行驶距离和时间 2017-03-08 20 ...

  4. Android百度地图实例详解之仿摩拜单车APP(包括附近车辆、规划路径、行驶距离、行驶轨迹记录,轨迹回放,导航等)

    转载请标明地址:http://blog.csdn.net/gaolei1201/article/details/60876811 2016一路有你,2017一起奋斗! 最近共享单车很火,动辄几亿美刀, ...

  5. 公司-摩拜单车:摩拜单车

    ylbtech-公司-摩拜单车:摩拜单车 摩拜单车,英文名mobike,是由胡玮炜创办的北京摩拜科技有限公司研发的互联网短途出行解决方案,是无桩借还车模式的智能硬件.人们通过智能手机就能快速租用和归还 ...

  6. Android 仿摩拜贴纸的动画

    最近在摩拜上发现一个特别喜欢的动画效果  一眼就喜欢上了    然后就开始了我的模仿之路   在CSDN搜索时发现原来我不是第一人   通过对其博客的观摩完成了一个简单的实现 需要深入开发的可以去(h ...

  7. 仿摩拜单车APP(包括附近车辆、规划路径、行驶距离、行驶轨迹记录,导航等)

    本文是由奇虎360公司高磊关于使用百度地图仿摩拜单车APP,原文地址:http://blog.csdn.net/gaolei1201/article/details/60876811 最近共享单车很火 ...

  8. python 抓取解析接口数据_[干货]用python抓取摩拜单车API数据并做可视化分析(源码)...

    原标题:[干货]用python抓取摩拜单车API数据并做可视化分析(源码) 在APP中能看到很多单车,但走到那里的时候,才发现车并不在那里.有些车不知道藏到了哪里:有些车或许是在高楼的后面,由于有GP ...

  9. 抓取摩拜单车API数据,并做可视化分析

    抓取摩拜单车API数据,并做可视化分析 纵聊天下 百家号|04-19 15:16 关注 警告:此篇文章仅作为学习研究参考用途,请不要用于非法目的. 摩拜是最早进入成都的共享单车,每天我从地铁站下来的时 ...

最新文章

  1. Python创建virtualenv(虚拟环境)方法
  2. cocos2dx小游戏数据签名算法破解
  3. AI一分钟|许家印抄底FF初见成效,FF91量产在望;苹果新专利:Siri将能识别用户身份...
  4. 生物战教训、生物安全问题以及未来监控军民两用生物技术扩散的手段
  5. 分析JDK中的Runtime的单例设计模式以及使用小例子
  6. Windows 10 Visual Studio 2015 配置 Caffe
  7. Configuring Locales
  8. python中str是什么函数_python str函数怎么用
  9. PHP Fatal error: Uncaught think\\exception\\ErrorException: error_log相关解决方法
  10. linux下的FTP服务配置
  11. Nucleic Acids Research | NONCODE数据库V6版发布,涵盖全面的动植物长非编码RNA注释
  12. md5加密算法的C(C++)代码实现
  13. 《Python编程从入门到实践》第10章文件和异常动手试一试答案(附代码)
  14. 如何防止网页被Demo
  15. 力扣回文字串的动态规划解法
  16. c语言基于easyX樱花特效,C++基于easyx图形库实现推箱子游戏
  17. matlab2c使用c++实现matlab函数系列教程-normpdf函数
  18. python怎样保存在桌面_python3应用windows api对后台程序窗口及桌面截图并保存的方法...
  19. 负债均衡(三)下载安装Nginx
  20. 【SQL】基础增删改查

热门文章

  1. win10 conda安装labme安装和使用
  2. 通过单字符置换可以将一个单词改为另一个单词
  3. 用matlab可以完成事件调度法么,(完整版)MM1排队系统仿真matlab实验报告
  4. Ubuntu下SU(seismic unix)安装教程
  5. HTML5飞机大战源码下载
  6. vue上传录音_vue实现移动端input上传视频、音频
  7. 教女朋友学前端之深入理解JS引擎
  8. java8 toMap(key重复如何解决)
  9. 可牛真的很牛,从安装开始就没有结束.
  10. 三年级计算机活动记录,小学科学三年级下册活动记录表