欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android自定义SeekBar滑动显示数字

程序员文章站 2024-03-05 08:59:42
先来上个效果图: 当滑动时:数值显示,滑动停止时显示数字,使用framelayout结合seekbar。 首先我们看看。 layout: <...

先来上个效果图:

Android自定义SeekBar滑动显示数字

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

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