Android模仿摩拜单车车型选择按钮
2017-03-22 16:18
232 查看
个人感觉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; } } }
把以上这段代码浓缩成
startLeft = mIndicatorLeft; startRight = mIndicatorRight;
其余的都不要了
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这个画笔必须加上抗锯齿属性
mSelectedIndicatorPaint.setAntiAlias(true);这样改完之后
setSelectedIndicatorHeight()设置indicator高度的方法就失效了,不过indicator的高度可以在draw里自己定义
来个效果图:
当然这种实现方法的缺点也有两个
1.要把tablayout以及相关类的源码复制出来,比较麻烦
2.无形中又多了好多个类啊,对APK大小敏感的同志慎用
相关文章推荐
- Android 4.0 在GridLayout中模仿RadioButton单选按钮
- android 时间和日期选择器 监听设置时间按钮
- Android常用控件三之按钮、选择框
- android 多选择框或按钮选中取值传值问题的解决
- Android常用控件(按钮事件,Toast,单选复选,时间日期选择框)解析
- android 点击按钮实现页面跳转并显示以选择信息
- android侧滑删除,模仿qq跟进item显示删除按钮
- android studio 如何实现RadioBotto和RadioGroup来实现单选按钮的选择
- Android自定义View模仿虎扑直播界面的打赏按钮功能
- Android自定义EditText——带一键清除和密码明文切换按钮,支持多样式选择
- android重写webview长按时选择文字然后点击搜索按钮的事件,默认是chrome接受点击事件,现在跳转到360搜索页面
- Android记住按钮选择颜色变化状态
- Android自定义View实现拖动选择按钮
- Android常用控件2之按钮,选择框,日期/时间控件
- android 点击一个按钮,选择一张图片,获取路径,然后显示在屏幕
- 解决android 更新之后 没有选择启动或完成按钮
- Android——图片视图(ImageView)、状态开关按钮(ToggleButton)、时钟、图片透明度、滚动和时间选择器
- Android-->模仿360底部导航按钮
- Android自定义view:拖拽选择按钮
- Android 自定义控件 按钮滚动选择