如何在Android中更改SeekBar的颜色?

5
有没有办法更改SeekBar android小部件中的黄色颜色?有什么解决方法吗?

这可能会对您有所帮助:http://techdroid.kbeanie.com/2010/04/custom-progressbar-for-android.html - NikhilReddy
我认为从以下链接列表中可以实现这个功能 -- 1) 自定义 Seekbar 2) SeekBar 颜色变化 3) SeekBar 自定义 - Praveenkumar
请查看此链接,它可能会对您有所帮助。更改默认的SeekBar颜色 - Yugandhar Babu
1个回答

1

步骤1:创建您的图像可绘制对象(9-Patch)

在创建任何XML可绘制对象之前,请确保创建所需的图像可绘制对象(包括一个9-Patch可绘制对象),用于SeekBar背景、手柄和进度部分。 9-Patch可绘制对象将在下面的步骤中使用XML可绘制对象。

创建以下可绘制对象并将它们放置在/res/drawable/文件夹中:

步骤2:SeekBar进度可绘制对象

现在为Android SeekBar进度(示例中的蓝色条纹部分)创建一个XML可绘制对象,将其命名为seekbar_progress_bg.xml,并将其放置在/res/drawable/文件夹中:

<?xml version="1.0" encoding="utf-8"?>
 <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <clip>
            <shape>
                <gradient
                    android:startColor="#FF5e8ea3"
                    android:centerColor="#FF32a0d2"
                    android:centerY="0.1"
                    android:endColor="#FF13729e"
                    android:angle="270"
                />
            </shape>
        </clip>
    </item>
    <item>
        <clip>
        <bitmap xmlns:android="http://schemas.android.com/apk/res/android"
            android:src="@drawable/stripe_bg"
            android:tileMode="repeat"
            android:antialias="true"
            android:dither="false"
            android:filter="false"
            android:gravity="left"
        />
        </clip>
    </item>
</layer-list>

上述XML首先绘制了一个半透明的蓝色渐变,然后在渐变的顶部叠加了半透明条纹图像。代码的突出显示行(第20行)是指在第1步中创建的drawable文件夹内的条纹(半透明)图像。

有关通过XML创建自定义形状的更多信息,请查看Android drawable资源文档,特别是位图和形状部分。

第三步:SeekBar背景Drawable

接下来创建主要的SeekBar进度Drawable;它将为SeekBar进度和secondaryProgress操作分配一个Drawable。将Drawable命名为seekbar_progress.xml,并将其放置在/res/drawable/文件夹中:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@android:id/background">
        <nine-patch
            xmlns:android="http://schemas.android.com/apk/res/android"
            android:src="@drawable/seekbar_background"
            android:dither="true"
         />
    </item>
    <item android:id="@android:id/secondaryProgress">
        <clip>
            <shape>
                <gradient
                    android:startColor="#80028ac8"
                    android:centerColor="#80127fb1"
                    android:centerY="0.75"
                    android:endColor="#a004638f"
                    android:angle="270"
                />
            </shape>
        </clip>
    </item>
    <item
        android:id="@android:id/progress"
        android:drawable="@drawable/seekbar_progress_bg"
    />
</layer-list>

上面突出显示的代码的第一位(第8行)是指向第1步中创建的seekbar背景图像(9-patch drawable),而第29行则是指向第2步中创建的drawable。
步骤4:将所有内容组合在一起...
此时,您只需要在声明seekbar时调用您的seekbar_progress drawable即可:
<SeekBar
        android:id="@+id/frequency_slider"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:max="20"
        android:progress="0"
        android:secondaryProgress="0"
        android:progressDrawable="@drawable/seekbar_progress"
        android:thumb="@drawable/seek_thumb"
/>

这两行突出显示的代码是为SeekBar项目设置进度和拇指可绘制对象。@drawable/seekbar_progress 是指在前一步创建的XML可绘制对象。

2
那看起来只是改变背景就很痛苦呢。 - Daniel Ryan
1
我喜欢这是直接从http://www.mokasocial.com/2011/02/create-a-custom-styled-ui-slider-seekbar-in-android/复制的...它很有用,但你本可以用自己的话来表达。 - agweber
如果您的SeekBarPreference全部使用Java编写,您会如何实现这一点? - Steve C.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接