ExoPlayer:如何更改控制器元素的颜色

时间:2018-09-24 19:42:28

标签: android exoplayer exoplayer2.x

我有一个通过exo_player_control_view.xml文件引入的自定义控件。我唯一需要的区别是元素(按钮和时间线)的颜色不同。

但是事实证明,我需要将所有图标的xml复制粘贴到只更改color属性的位置。当然可以,但是我希望有一个简单的方法。

另一个问题是图标已获得Apache 2.0许可证(example)的支持,我不确定是否允许将其复制到我的项目中。

问题::如何更改控制器元素的颜色?是否可以在不复制和修改标准图标的情况下做到这一点?

2 个答案:

答案 0 :(得分:1)

实际上在这里使用着色来做类似的事情。假设您的exoplayer布局xml文件包含以下内容

    <ImageButton android:id="@id/exo_prev"
        style="@style/ExoMediaButton.Previous"/>

    <ImageButton android:id="@id/exo_rew"
        style="@style/ExoMediaButton.Rewind"/>

    <ImageButton android:id="@id/exo_play"
        style="@style/ExoMediaButton.Play"/>

    <ImageButton android:id="@id/exo_pause"
        style="@style/ExoMediaButton.Pause"/>

    <ImageButton android:id="@id/exo_ffwd"
        style="@style/ExoMediaButton.FastForward"/>

然后您可以执行以下操作:

    val playButton = audioView.findViewById<ImageButton>(R.id.exo_play)
    tintButton(playButton, color)
    val pauseButton = audioView.findViewById<ImageButton>(R.id.exo_pause)
    tintButton(pauseButton, color)
    val prevButton = audioView.findViewById<ImageButton>(R.id.exo_prev)
    tintButton(prevButton, color)
    val rewindButton = audioView.findViewById<ImageButton>(R.id.exo_rew)
    tintButton(rewindButton, color)
    val ffwdButton = audioView.findViewById<ImageButton>(R.id.exo_ffwd)
    tintButton(ffwdButton, color)

private fun tintButton(button: ImageButton, color: Int) {
    val drawable = DrawableCompat.wrap(button.drawable)
    DrawableCompat.setTintList(drawable.mutate(), ColorStateList.valueOf(color))
    button.setImageDrawable(drawable)
}

答案 1 :(得分:1)

尝试一下:

ImageButton play = findViewById(R.id.exo_play);
Drawable drawable = play.getDrawable();
drawable.setTintList(ColorStateList.valueOf(Color.parseColor("#41a8ff")));