安卓自定义seekbar数值_Android 可拖动的seekbar自定义进度值
最近接了个项目其中有需要要实现此功能: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自定义进度值相关推荐
- 安卓股票悬浮窗_Android 可拖动悬浮窗实现
最近公司的项目里,需要通过悬浮窗进行控制,悬浮窗根据手势进行拖动.当时同事给的建议用 ViewDragHelper 来实现(原谅没玩过这个东西,网上看了下教程挺牛逼的,算了,还是选择用手势监听做吧), ...
- 安卓设置菊花动画_Android 加载菊花图 自定义
本来想找一个ios的菊花加载图旋转一下搞定这个的,但是发现使用图片后由于图片的不对称导致动画时有抖动现象,不能忍,于是搜了下自定义菊花图,额,然后就没有然后了,都不是想要的,于是开始了苦逼的自定义Vi ...
- android 自定义banner样式_Android中Banner的指示器自定义View
Banner是我们经常会遇到的一个功能,有很多是需要支持滑动是有个当前的指示器界面,一般如果为了图省事的方案可以用LinearLayout然后不断的在里面添加View,把背景通过shape来设置圆形. ...
- android 拖动进度,Android 可拖动的seekbar自定义进度值
最近接了个项目其中有需要要实现此功能:seekbar需要显示最左和最右值,进度要跟随进度块移动.下面通过此图给大家展示下效果,可能比文字描述要更清晰. 其实实现起来很简单,主要是思路.自定义控件的话也 ...
- 安卓键盘加上数字_Android自定义键盘的实现(数字键盘和字母键盘)
在项目中,产品对于输入方式会有特殊的要求,需要对输入方式增加特定的限制,这就需要采用自定义键盘.本文主要讲述数字键盘和字母键盘的自定义实现. 键盘效果: 自定义键盘的实现步骤如下: 自定义Custom ...
- Android的进度条(ProgressBar)、拖动条(SeekBar)
Android的进度条与拖动条 一.ProgressBar(进度条) 进度条,ProgressBar,分为环形和水平条行, 首先看下效果图,Progress进度加载. 进度条XML中的属性 ...
- Android零基础入门第53节:拖动条SeekBar和星级评分条RatingBar
前面两期都在学习ProgressBar的使用,关于自定义ProgressBar的内容后期会继续学习的,本期先来学习ProgressBar的2个子组件SeekBar和RatingBar. 一.SeekB ...
- seaborn可视化绘制双变量分组条形图(Customizing Annotation of Bars: Side-by-side)、添加数值标签进行标记、并自定义条形图数值标签的格式
seaborn可视化绘制双变量分组条形图(Customizing Annotation of Bars: Side-by-side).添加数值标签进行标记.并自定义条形图数值标签的格式(从45000到 ...
- uniapp图片编辑器,支持自定义尺寸、缩放、拖动、裁剪
支持功能: 1.自定义裁剪尺寸 2.等比例缩放 3.自由拖动 5.裁剪生成新图片 6.本地选择图片 实现代码: <!-- 图片编辑器,支持自定义尺寸.缩放.拖动.裁剪@version 1.0.2 ...
最新文章
- BidNet:无视差估计的双目图像去雾(CVPR2020)
- Spring Boot Admin 2.2.0发布,支持最新Spring Boot/Cloud之外,新增中文展示!
- 比特币是什么,看这篇就懂了
- mac 源生安装mysql_docker安装MySQL数据库
- AI:人工智能的多模态融合模型的简介、发展以及未来趋势
- java jdk 检测安装_JDK如何安装和配置环境变量以及检验是否成功安装JDK的方法
- 知名论坛猴岛游戏论坛宣布永久关闭!
- java compareTo() 用法注意点
- [机器学习] Boosting算法2 --- GBDT
- Java工作笔记-使用jquery.timer.js实现数据自动刷新
- 推荐轻量高效无依赖的开源JS插件和库
- 剑指Offer 64 求1+2+...+n
- 图像语义分割(10)-DeepLabV3+: 用于图像语义分割的带有空洞可分离卷积的编解码结构
- 读书笔记 - 深入解析Windows操作系统 - C1. 概念和工具
- Windows下的 Redis 安装教程
- 生成开端原著小说词云
- Three.js搭配OrbitControls.js实现flyTo()
- 计算机组成原理:RISC与CISC比较
- 最新版养猫小程序前端+后端搭建详细教程
- 【blue bridge cup】笔记
热门文章
- 三星c9pro语言,三星C9Pro评测 为什么被认为专门为中国用户量身打造的一款产品...
- 【基于Qt的在线音乐播放器】
- Trias系统中,staking的正确打开方式
- 科普---互联网图片 文字识别系统 你造么
- 政企机构用户注意 蠕虫病毒Prometei正在针对局域网横向渗透传播
- 香橙派(orangepi)vnc连接灰屏
- PostgreSQL 关于Jsonb字段的处理详解(长期更)
- 「应用架构」TOGAF建模之应用架构:应用程序和用户位置图
- Python+pygame飞机大战游戏
- 阿里云下Ubuntu18.04安装部署EMQ X 消息服务器