自定义SeekBar滑动显示数字

651532704 8年前
   <h2><strong>先来上个效果图:</strong></h2>    <p style="text-align:center"><img src="https://simg.open-open.com/show/148feda6deb6b83c3d35f0853ddd58cd.gif"></p>    <p style="text-align:center">2016092001.gif</p>    <h2><strong>当滑动时:数值显示,滑动停止时显示数字。</strong></h2>    <p>使用FrameLayout结合SeekBar。</p>    <p>首先我们看看。Layout:</p>    <pre>  <code class="language-java"><?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></code></pre>    <p>需要自定义可再上面修改图片问题颜色等,或者自己封装起来。</p>    <p>初始化函数。</p>    <pre>  <code class="language-java">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);      }</code></pre>    <p>主要是根据是否有改变,和触摸进行判断字和图片的显示。</p>    <pre>  <code class="language-java">@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);          }      }</code></pre>    <p>废话也不多说,原理很简单。</p>    <p> </p>    <p> </p>    <p>来自:http://www.jianshu.com/p/3a67789e85bf</p>    <p> </p>