最近接了个项目其中有需要要实现此功能:seekbar需要显示最左和最右值,进度要跟随进度块移动。下面通过此图给大家展示下效果,可能比文字描述要更清晰。

其实实现起来很简单,主要是思路。自定义控件的话也不难,之前我的博客也有专门介绍,这里就不再多说。

实现方案

这里是通过继承seekbar来自定义控件,这样的方式最快。主要难点在于进度的显示,其实我很的是最笨的方法,就是用了一个popwindow显示在进度条的上方,然后在移动滑块的时候实时的改变它显示的横坐标。看进度显示的核心代码:

private void initHintPopup(){

String popupText = null;

if (mProgressChangeListener!=null){

popupText = mProgressChangeListener.onHintTextChanged(this, cuclaProcess(leftText));

}

LayoutInflater inflater = (LayoutInflater)getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);

final View undoView = inflater.inflate(R.layout.popup, null);

mPopupTextView = (TextView)undoView.findViewById(R.id.text);

mPopupTextView.setText(popupText!=null? popupText : String.valueOf(cuclaProcess(leftText)));

// mPopup.dismiss();

if(mPopup == null)

mPopup = new PopupWindow(undoView, mPopupWidth, ViewGroup.LayoutParams.WRAP_CONTENT, false);

else{

mPopup.dismiss();

mPopup = new PopupWindow(undoView, mPopupWidth, ViewGroup.LayoutParams.WRAP_CONTENT, false);

}

}

布局很简单,就一个TextView。

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:orientation="horizontal"

android:background="#0fff"

android:gravity="center">

android:padding="8dp"

android:textSize="16sp"

android:singleLine="true"

android:ellipsize="end"

android:textColor="@color/green"

android:layout_width="wrap_content"

android:layout_height="wrap_content"/>

左右的显示值原理也是一样的,看以下代码:

private void initRightText(){

LayoutInflater inflater = (LayoutInflater)getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);

final View undoView = inflater.inflate(R.layout.rightpop, null);

mPopupRightView = (TextView)undoView.findViewById(R.id.righttext);

mPopupRightView.setText(rightText+"");

mRightPopup = new PopupWindow(undoView, mPopupWidth, ViewGroup.LayoutParams.WRAP_CONTENT, false);

mRightPopup.setAnimationStyle(R.style.fade_animation);

}

那么如何让滑块上方的文字跟着滑动。只要重写onProgressChanged就可以了。

public void onProgressChanged(SeekBar seekBar, int progress, boolean b) {

String popupText = null;

if (mProgressChangeListener!=null){

popupText = mProgressChangeListener.onHintTextChanged(this, cuclaProcess(leftText));

}

if(mExternalListener !=null){

mExternalListener.onProgressChanged(seekBar, progress, b);

}

step = cuclaProcess(leftText);

mPopupTextView.setText(popupText!=null? popupText : String.valueOf(step));

if(mPopupStyle==POPUP_FOLLOW){

mPopup.update((int) (this.getX()+(int) getXPosition(seekBar)), (int) (this.getY()+2*mYLocationOffset+this.getHeight()), -1, -1);

}

}

其实最主要的就是算出x的位置getXPosition。看以上代码:

private float getXPosition(SeekBar seekBar){

float val = (((float)seekBar.getProgress() * (float)(seekBar.getWidth() - 2 * seekBar.getThumbOffset())) / seekBar.getMax());

float offset = seekBar.getThumbOffset()*2;

int textWidth = mPopupWidth;

float textCenter = (textWidth/2.0f);

float newX = val+offset - textCenter;

return newX;

}

通过getProgress获得进度来计算x移动的距离。这样就实现了文字的移动。最后会给出源码下载。

如何使用呢,跟普通自定义的控件一样,如下:

android:id="@+id/seekbar"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:layout_centerInParent="true"

android:layout_marginTop="40dp"

android:progress="5"

hint:popupWidth="40dp"

hint:yOffset="10dp"

hint:popupStyle="fixed"/>

当然目前实现了原生的样式,下面来说说如何自定义seekbar的样式。

自定义样式

seekbar要改样式得准备三张图片,左边己选择的滑动条图片,右边未选择的滑动条图片和滑块图片,滑动条要9.png格式的最好。这里为方便,直接用layer-list来处理滑动条部分。在drawable中定义xml文件。

android:angle="180"

android:centerColor="#F5F5F5"

android:centerY="0.2"

android:endColor="#F5F5F5"

android:startColor="#F5F5F5" />

/>

android:angle="180"

android:centerColor="#39ac69"

android:centerY="0.45"

android:endColor="#39ac69"

android:startColor="#39ac69" />

这样就实现了重叠的图片。设置滑块的图片则直接在seekhint中设置:

android:thumb="@drawable/bt_seekbar"

到此进度值可拖动的seekbar就实现了。大家都看明白了,有任何疑问欢迎给脚本之家小编留言,小编会及时给大家回复的。欲了解更多精彩内容请持续关注脚本之家网站,谢谢!

安卓自定义seekbar数值_Android 可拖动的seekbar自定义进度值相关推荐

  1. 安卓股票悬浮窗_Android 可拖动悬浮窗实现

    最近公司的项目里,需要通过悬浮窗进行控制,悬浮窗根据手势进行拖动.当时同事给的建议用 ViewDragHelper 来实现(原谅没玩过这个东西,网上看了下教程挺牛逼的,算了,还是选择用手势监听做吧), ...

  2. 安卓设置菊花动画_Android 加载菊花图 自定义

    本来想找一个ios的菊花加载图旋转一下搞定这个的,但是发现使用图片后由于图片的不对称导致动画时有抖动现象,不能忍,于是搜了下自定义菊花图,额,然后就没有然后了,都不是想要的,于是开始了苦逼的自定义Vi ...

  3. android 自定义banner样式_Android中Banner的指示器自定义View

    Banner是我们经常会遇到的一个功能,有很多是需要支持滑动是有个当前的指示器界面,一般如果为了图省事的方案可以用LinearLayout然后不断的在里面添加View,把背景通过shape来设置圆形. ...

  4. android 拖动进度,Android 可拖动的seekbar自定义进度值

    最近接了个项目其中有需要要实现此功能:seekbar需要显示最左和最右值,进度要跟随进度块移动.下面通过此图给大家展示下效果,可能比文字描述要更清晰. 其实实现起来很简单,主要是思路.自定义控件的话也 ...

  5. 安卓键盘加上数字_Android自定义键盘的实现(数字键盘和字母键盘)

    在项目中,产品对于输入方式会有特殊的要求,需要对输入方式增加特定的限制,这就需要采用自定义键盘.本文主要讲述数字键盘和字母键盘的自定义实现. 键盘效果: 自定义键盘的实现步骤如下: 自定义Custom ...

  6. Android的进度条(ProgressBar)、拖动条(SeekBar)

    Android的进度条与拖动条 一.ProgressBar(进度条) 进度条,ProgressBar,分为环形和水平条行, 首先看下效果图,Progress进度加载. 进度条XML中的属性       ...

  7. Android零基础入门第53节:拖动条SeekBar和星级评分条RatingBar

    前面两期都在学习ProgressBar的使用,关于自定义ProgressBar的内容后期会继续学习的,本期先来学习ProgressBar的2个子组件SeekBar和RatingBar. 一.SeekB ...

  8. seaborn可视化绘制双变量分组条形图(Customizing Annotation of Bars: Side-by-side)、添加数值标签进行标记、并自定义条形图数值标签的格式

    seaborn可视化绘制双变量分组条形图(Customizing Annotation of Bars: Side-by-side).添加数值标签进行标记.并自定义条形图数值标签的格式(从45000到 ...

  9. uniapp图片编辑器,支持自定义尺寸、缩放、拖动、裁剪

    支持功能: 1.自定义裁剪尺寸 2.等比例缩放 3.自由拖动 5.裁剪生成新图片 6.本地选择图片 实现代码: <!-- 图片编辑器,支持自定义尺寸.缩放.拖动.裁剪@version 1.0.2 ...

最新文章

  1. BidNet:无视差估计的双目图像去雾(CVPR2020)
  2. Spring Boot Admin 2.2.0发布,支持最新Spring Boot/Cloud之外,新增中文展示!
  3. 比特币是什么,看这篇就懂了
  4. mac 源生安装mysql_docker安装MySQL数据库
  5. AI:人工智能的多模态融合模型的简介、发展以及未来趋势
  6. java jdk 检测安装_JDK如何安装和配置环境变量以及检验是否成功安装JDK的方法
  7. 知名论坛猴岛游戏论坛宣布永久关闭!
  8. java compareTo() 用法注意点
  9. [机器学习] Boosting算法2 --- GBDT
  10. Java工作笔记-使用jquery.timer.js实现数据自动刷新
  11. 推荐轻量高效无依赖的开源JS插件和库
  12. 剑指Offer 64 求1+2+...+n
  13. 图像语义分割(10)-DeepLabV3+: 用于图像语义分割的带有空洞可分离卷积的编解码结构
  14. 读书笔记 - 深入解析Windows操作系统 - C1. 概念和工具
  15. Windows下的 Redis 安装教程
  16. 生成开端原著小说词云
  17. Three.js搭配OrbitControls.js实现flyTo()
  18. 计算机组成原理:RISC与CISC比较
  19. 最新版养猫小程序前端+后端搭建详细教程
  20. 【blue bridge cup】笔记

热门文章

  1. 三星c9pro语言,三星C9Pro评测 为什么被认为专门为中国用户量身打造的一款产品...
  2. 【基于Qt的在线音乐播放器】
  3. Trias系统中,staking的正确打开方式
  4. 科普---互联网图片 文字识别系统 你造么
  5. 政企机构用户注意 蠕虫病毒Prometei正在针对局域网横向渗透传播
  6. 香橙派(orangepi)vnc连接灰屏
  7. PostgreSQL 关于Jsonb字段的处理详解(长期更)
  8. 「应用架构」TOGAF建模之应用架构:应用程序和用户位置图
  9. Python+pygame飞机大战游戏
  10. 阿里云下Ubuntu18.04安装部署EMQ X 消息服务器