当前位置: 移动技术网 > IT编程>移动开发>Android > Android自定义SeekBar滑动显示数字

Android自定义SeekBar滑动显示数字

2019年07月24日  | 移动技术网IT编程  | 我要评论

听云轩,1440音译,治疗尖锐湿疣的中药方

先来上个效果图:

当滑动时:数值显示,滑动停止时显示数字,使用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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持移动技术网。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网