Android seekbar 为什么 thumb每次初始化都会先显示在起始位置,然后才显示正确的位置
时间: 2024-02-09 11:08:26 浏览: 152
这是因为在初始化 SeekBar 时,系统会先设置 thumb 的位置为起始位置,然后才根据实际的值来调整 thumb 的位置。这个过程可以通过设置 `android:thumbOffset` 属性来改变 thumb 的初始位置,但是无法避免 thumb 先显示在起始位置的问题。
如果您想要在初始化时直接显示正确的位置,可以在设置完 SeekBar 的最大值和最小值后,再调用 `setProgress()` 方法来设置当前进度值。这样,系统就会根据实际的值来直接设置 thumb 的位置,避免了先显示在起始位置的问题。
示例代码:
```
SeekBar seekBar = findViewById(R.id.seekBar);
seekBar.setMax(100);
seekBar.setProgress(50); // 设置当前进度值为 50
```
这样,初始化时 thumb 就会直接显示在 50 的位置,而不是先显示在起始位置再调整到 50 的位置。
相关问题
Android seekbar thunb滑块,怎么避免每次切界面thumb滑块都会先在seekbar起始位置先显示一下再正常显示
这个问题的原因是在每次切换界面时,SeekBar会重新进行布局和绘制,因此Thumb滑块会被重置到起始位置。为了避免这种情况,你可以尝试使用以下两种方法:
1. 在布局文件中设置thumb的位置
你可以在SeekBar的布局文件中添加如下属性来设置Thumb的位置:
```
android:thumbOffset="0dp"
```
这个属性可以让Thumb直接显示在SeekBar的起始位置,从而避免了每次切换界面时的闪烁问题。
2. 在代码中设置thumb的位置
你也可以在代码中设置Thumb的位置,避免在布局文件中设置。你可以在SeekBar的OnCreate方法或OnResume方法中添加如下代码:
```
seekBar.setThumbOffset(0);
```
这个方法可以让Thumb直接显示在SeekBar的起始位置,同样避免了每次切换界面时的闪烁问题。
无论哪种方法,都可以有效地解决Thumb滑块闪烁的问题。
Android seekbar 的thumb已经设置为透明,为什么还有会有按下的圆球效果
这是因为 Android SeekBar 默认会给 thumb 添加一个按下效果,即使你将 thumb 设置为透明也不会生效。如果你想要完全去除按下效果,可以通过自定义 SeekBar 的样式来实现。具体来说,可以通过在样式中设置 android:state_pressed 属性的值为 false 来禁用按下效果,示例代码如下:
```xml
<style name="SeekBarStyle" parent="Widget.AppCompat.SeekBar">
<item name="android:state_pressed">false</item>
</style>
```
然后在布局中将 SeekBar 的样式设置为自定义的样式即可:
```xml
<SeekBar
android:id="@+id/seek_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:thumb="@drawable/transparent"
style="@style/SeekBarStyle" />
```
其中,@drawable/transparent 是一个透明的图片,用于将 thumb 设置为透明。
阅读全文