自定義SeekBar滑動顯示數字

651532704 8年前發布 | 20K 次閱讀 安卓開發 Android開發 移動開發

先來上個效果圖:

2016092001.gif

當滑動時:數值顯示,滑動停止時顯示數字。

使用FrameLayout結合SeekBar。

首先我們看看。Layout:

<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="

</merge></code></pre>

需要自定義可再上面修改圖片問題顏色等,或者自己封裝起來。

初始化函數。

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> 

主要是根據是否有改變,和觸摸進行判斷字和圖片的顯示。

@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);
        }
    }

廢話也不多說,原理很簡單。

 

 

來自:http://www.jianshu.com/p/3a67789e85bf

 

 本文由用戶 651532704 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!