Android seekbar 的thumb已经设置为透明,为什么还有会有按下的圆球效果
时间: 2024-03-16 09:45:48 浏览: 131
这是因为 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 设置为透明。
相关问题
设置了android:thumb="@android:color/transparent" SeekBar 滑动到最前和最后的半透明圆球依然存在
如果在布局文件中设置 `android:thumb="@android:color/transparent"` 无效,可以尝试在代码中进行设置。
在 Java 代码中设置可以使用 `setThumb` 方法,示例代码如下:
```java
SeekBar seekBar = findViewById(R.id.seekBar);
Drawable transparentDrawable = new ColorDrawable(Color.TRANSPARENT);
seekBar.setThumb(transparentDrawable);
```
如果您需要去掉 SeekBar 滑动到最前和最后的半透明圆球,还需要在布局文件中设置其他属性,例如 `android:splitTrack="false"`,示例代码如下:
```xml
<SeekBar
android:id="@+id/seekBar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:thumb="@android:color/transparent"
android:splitTrack="false" />
```
`android:splitTrack` 属性表示是否绘制拇指和轨道之间的分隔符,默认为 true。将其设置为 false 可以去除 SeekBar 滑动到最前和最后的半透明圆球。
Android seekbar 为什么 thumb每次初始化都会先显示在起始位置,然后才显示正确的位置
这是因为在初始化 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 的位置。
阅读全文