如何解决如何更改波形颜色 Android Studio kotlin
我一直在关注 Youtube 上的关于带有波形的录音机的教程。我想知道如何改变波形的颜色。我想要蓝色。
这是课程代码
class WaveformView(context: Context?,attrs: AttributeSet?) : View(context,attrs) {
private var paint = Paint()
private var amplitudes = ArrayList<Float>()
private var spikes = ArrayList<RectF>()
private var radius = 6f
private var w = 9f
private var sw = 0f
private var sh = 400f
private var d = 6f
private var maxSpikes = 0
init {
paint.color = Color.rgb(244,81,3)
sw = resources.displayMetrics.widthPixels.toFloat()
maxSpikes = (sw / (w+d)).toInt()
}
fun addamplitude(amp: Float){
var norm = (amp.toInt() / 7).coerceAtMost(400).toFloat()
amplitudes.add(norm)
spikes.clear()
var amps: List<Float> = amplitudes.takeLast(maxSpikes)
for(i in amps.indices){
var left = sw - i*(w+d)
var top = sh/2 - amps[i]/2
var right: Float = left + w
var bottom: Float = top + amps[i]
spikes.add(RectF(left,top,right,bottom))
}
invalidate()
}
fun clear() : ArrayList<Float>{
var amps: ArrayList<Float> = amplitudes.clone() as ArrayList<Float>
amplitudes.clear()
spikes.clear()
invalidate()
return amps
}
override fun draw(canvas: Canvas?) {
super.draw(canvas)
spikes.forEach {
canvas?.drawRoundRect(it,radius,paint)
}
}
}
我已经尝试在 XML 布局文件中更改它,但没有奏效。所以在这里粘贴它没有任何意义。
解决方法
添加一个颜色属性来改变画图的颜色:
var waveFormColor: Int
@ColorInt get() = paint.color
set(@ColorInt value) { paint.color = value }
然后可以在类外修改颜色:
myWaveformView.waveFormColor = Color.parseColor("#FF0080")
// or
myWaveformView.waveFormColor = "#FF0080".toColorInt()
// or
myWaveformView.waveFormColor = Color.rgb(255,128)
@ColorInt
是可选的,您可以省略它。在某些情况下,它可以帮助 Lint 防止您传递错误类型的值。
如果您想通过 XML 设置颜色,请先在 res/values
中创建一个 attrs.xml 文件(如果您还没有),然后添加一个条目来为您的自定义视图设置主题:
<resources>
<declare-styleable name="WaveformView">
<attr name="waveform_color" format="color"/>
</declare-styleable>
</resources>
在您的视图布局文件中,您可以使用 app:waveform_color="@color/someColor"
使用此属性。
然后更新自定义视图的 init
块以使用该 XML 属性:
init {
context.theme.obtainStyledAttributes(attrs,R.styleable.WaveformView,0).use {
paint.color = it.getColor(R.styleable.WaveformView_waveform_color,Color.rgb(244,81,3))
}
sw = resources.displayMetrics.widthPixels.toFloat()
maxSpikes = (sw / (w+d)).toInt()
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。