seekbar Layout 参数分析

app在使用seekbar的时候,往往会对seekbar进行部分的自定义,因此也会引入一些问题。

比如thumb(拖动的点)位置不对,左偏或者右偏移,或者脱离进度条等问题。

这其中是对部分参数的使用不当造成的。


一、先看seekbar的布局:

1.seekbar.java中

    public SeekBar(Context context, AttributeSet attrs) {
        this(context, attrs, com.android.internal.R.attr.seekBarStyle);
    }
到res的xml中查找这个attr:

2.res中的定义

attrs.xml	672 <attr name="seekBarStyle" format="reference" />
一般都是holo的

themes_holo.xml	282 <item name="seekBarStyle">@style/Widget.Holo.SeekBar</item>
可以看到从seekBarStyle到SeekBar的定位第一步完成了。

3.找下这个Holo.SeekBar的定义:

在style里面(@style/Widget.Holo.SeekBar):进到里面看一下,详细的参数:

519    <style name="Widget.Holo.SeekBar">
520        <item name="indeterminateOnly">false</item>
521        <item name="progressDrawable">@drawable/scrubber_progress_horizontal_holo_dark</item>
522        <item name="indeterminateDrawable">@drawable/scrubber_progress_horizontal_holo_dark</item>
523        <item name="minHeight">13dip</item>
524        <item name="maxHeight">13dip</item>
525        <item name="thumb">@drawable/scrubber_control_selector_holo</item>
526        <item name="thumbOffset">16dip</item>
527        <item name="focusable">true</item>
528        <item name="paddingStart">16dip</item>
529        <item name="paddingEnd">16dip</item>
530        <item name="mirrorForRtl">true</item>
531    </style>
到此算是找到了seekbar的布局定义。

下面就分别来理解一下各个参数什么意思,以便在自定义的时候合理的使用。

二、参数解释

1.indeterminateOnly

//TODO:

2.progressDrawable 

是进度条的一个drawable的布局:可以自定义个不同的进度条。在app的xml中对这个进行重新定义就可以了。

drawable/scrubber_progress_horizontal_holo_dark.xml

17<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
18    <item android:id="@android:id/background"
19            android:drawable="@android:drawable/scrubber_track_holo_dark" />
20    <item android:id="@android:id/secondaryProgress">
21        <scale android:scaleWidth="100%"
22               android:drawable="@android:drawable/scrubber_secondary_holo" />
23    </item>
24    <item android:id="@android:id/progress">
25        <scale android:scaleWidth="100%"
26               android:drawable="@android:drawable/scrubber_primary_holo" />
27    </item>
28</layer-list>

3.indeterminateDrawable

//TODO:

4.minHeight  maxHeight

设置seekabr的最大最小高度。

5.thumb

定义thumb的图片

6.thumbOffset

定义thumb的偏移位置,想对于进度条启始点的位置。这里是16dp,因为图片是原型的,大小是32dp,偏移16使得圆心在进度条的启始点。

7.paddingStart paddingEnd

设置seekbar整个控件左右距离空多少个dp用的。

三、自定义seekbar的时候,要注意的是图片和thumbOffset;

会导致thumb左右偏离progress的启始点,

其中AbsSeekBar中,会获取这个值:

130        final int thumbOffset = a.getDimensionPixelOffset(
131                R.styleable.SeekBar_thumbOffset, getThumbOffset());
132        setThumbOffset(thumbOffset);

初始seekbar:

    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_marginTop="500dp"
    tools:context="com.example.spreadtrumshitaoli.simpleseekbar.MainActivity">

    <SeekBar
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        />



1.图片和thumbOffset没有合理配置:这里thumb用的系统的,半径还是16dp,设置不配套的offset后:

<SeekBar
        android:thumbOffset="20dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        />



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值