Android自定义SeekBar滑动显示数字
程序员文章站
2024-03-05 08:59:42
先来上个效果图:
当滑动时:数值显示,滑动停止时显示数字,使用framelayout结合seekbar。
首先我们看看。
layout:
<...
先来上个效果图:
当滑动时:数值显示,滑动停止时显示数字,使用framelayout结合seekbar。
首先我们看看。
layout:
<?xml version="1.0" encoding="utf-8"?> <merge xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools"> <relativelayout android:id="@+id/wrapper_seekbar_indicator" android:layout_width="wrap_content" android:layout_height="wrap_content"> <imageview android:id="@+id/img_seekbar_indicator" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignparenttop="true" /> <textview android:id="@+id/txt_seekbar_indicated_progress" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center" android:textcolor="#333333" android:textsize="@dimen/space_12" tools:text="100" /> </relativelayout> <relativelayout android:id="@+id/wrapper_seekbar" android:layout_width="wrap_content" android:layout_height="wrap_content"> <seekbar android:id="@+id/seekbar" style="@style/widget.seekbar.normal" android:layout_width="match_parent" android:layout_height="wrap_content" /> </relativelayout> </merge>
需要自定义可再上面修改图片问题颜色等,或者自己封装起来。
初始化函数。
private void init(context context, attributeset attrs, int defstyle) { view view = layoutinflater.from(context).inflate( r.layout.view_seekbar_indicated, this); bindviews(view); if (attrs != null) setattributes(context, attrs, defstyle); mseekbar.setonseekbarchangelistener(this); mtextviewprogress.settext(string.valueof(mseekbar.getprogress())); getviewtreeobserver().addongloballayoutlistener( new viewtreeobserver.ongloballayoutlistener() { @targetapi(build.version_codes.jelly_bean) @override public void ongloballayout() { mmeasuredwidth = mseekbar.getwidth() - mseekbar.getpaddingleft() - mseekbar.getpaddingright(); mseekbar.setpadding( mseekbar.getpaddingleft(), mseekbar.getpaddingtop() + mwrapperindicator.getheight(), mseekbar.getpaddingright(), mseekbar.getpaddingbottom()); setindicator(); getviewtreeobserver() .removeongloballayoutlistener(this); } }); // mwrapperindicator.setvisibility(view.gone); }
主要是根据是否有改变,和触摸进行判断字和图片的显示。
@override public void onprogresschanged(seekbar seekbar, int progress, boolean fromuser) { setindicator(); if (monseekbarchangelistener != null) monseekbarchangelistener.onprogresschanged(seekbar, progress, fromuser); } @override public void onstarttrackingtouch(seekbar seekbar) { if (monseekbarchangelistener != null) { monseekbarchangelistener.onstarttrackingtouch(seekbar); mwrapperindicator.setvisibility(view.visible); } } @override public void onstoptrackingtouch(seekbar seekbar) { if (monseekbarchangelistener != null) { monseekbarchangelistener.onstoptrackingtouch(seekbar); mwrapperindicator.setvisibility(view.gone); } }
废话也不多说,原理很简单。
工程地址:
https://github.com/xiaoli1993/seekbarindicated/tree/47ffcc890fb9c7000bb20d9b248620564c2c8122
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
上一篇: PHP中静态变量的使用方法实例分析