【发布时间】:2016-11-30 02:43:05
【问题描述】:
美好的一天。我正在为 android 创建一个类似 siri 的 wave,但遇到了一个大问题。我需要 4 种颜色的 wave。假设我只有一条线根据声音在屏幕上绘制分贝。无论如何我都能做到,但我无法为同一路径提供 4 种不同的颜色。假设它是 1 条从屏幕开始移动到屏幕结束的单一路径,我需要那条线有 4 种不同的颜色,主要是我不得不将路径分成 4 部分并为每个部分绘制颜色,但谷歌或任何其他来源都没有给我任何东西(甚至没有找到任何与我想要的相似的东西)。 同时,我将代码发布在我实际绘制线条的位置。
for (int l = 0; l < mWaveCount; ++l) {
float midH = height / 2.0f;
float midW = width / 2.0f;
float maxAmplitude = midH / 2f - 4.0f;
float progress = 1.0f - l * 1.0f / mWaveCount;
float normalAmplitude = (1.5f * progress - 0.5f) * mAmplitude;
float multiplier = (float) Math.min(1.0, (progress / 3.0f * 2.0f) + (1.0f / 3.0f));
if (l != 0) {
mSecondaryPaint.setAlpha((int) (multiplier * 255));
}
mPath.reset();
for (int x = 0; x < width + mDensity; x += mDensity) {
float scaling = 1f - (float) Math.pow(1 / midW * (x - midW), 2);
float y = scaling * maxAmplitude * normalAmplitude * (float) Math.sin(
180 * x * mFrequency / (width * Math.PI) + mPhase) + midH;
// canvas.drawPoint(x, y, l == 0 ? mPrimaryPaint : mSecondaryPaint);
//
// canvas.drawLine(x, y, x, 2*midH - y, mSecondaryPaint);
if (x == 0) {
mPath.moveTo(x, y);
} else {
mPath.lineTo(x, y);
// final float x2 = (x + mLastX) / 2;
// final float y2 = (y + mLastY) / 2;
// mPath.quadTo(x2, y2, x, y);
}
mLastX = x;
mLastY = y;
}
if (l == 0) {
canvas.drawPath(mPath, mPrimaryPaint);
} else {
canvas.drawPath(mPath, mSecondaryPaint);
}
}
我试图在if (l == 0) {
canvas.drawPath(mPath, mPrimaryPaint);
} 上更改颜色,但如果我在这里更改它,则根本没有结果,要么线是分开的,根本没有移动,但它应该,要么不应用颜色,可能是因为我是就像我必须做的那样循环进行,每次选择最后一种颜色来绘制。无论如何,你能帮我吗?即使是一个小的参考对我来说也是黄金,因为互联网上真的什么都没有。
【问题讨论】:
-
您是否尝试过使用多色的单路径?
-
嗯,这是如何实现的?这就是我真正要问的......
-
我正是需要这个!
-
如果你试图绘制相同的路径意味着你为什么使用
.mPath.reset()??尝试删除它 -
如果我不使用reset,屏幕上会画上百万条路径