我有一个通过exo_player_control_view.xml
文件引入的自定义控件。我唯一需要的区别是元素(按钮和时间线)的颜色不同。
但是事实证明,我需要将所有图标的xml复制粘贴到只更改color属性的位置。当然可以,但是我希望有一个简单的方法。
另一个问题是图标已获得Apache 2.0许可证(example)的支持,我不确定是否允许将其复制到我的项目中。
问题::如何更改控制器元素的颜色?是否可以在不复制和修改标准图标的情况下做到这一点?
答案 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")));