Ich habe eine einfache Wellenform wie das Bild unten mit meinem Code generiert.Wie bekomme ich eine Soundcloud wie Wellenformen in Android
Aber ich will mehr Lücke zwischen jeder Zeile geben, die ich es unten wie die Soundcloud Wellen wie die picutre sein wollen.
Hier ist mein Code:
public class VisualizerView extends View {
private static final int LINE_WIDTH = 15; // width of visualizer lines
private static final int LINE_SCALE = 55; // scales visualizer lines
private List<Float> amplitudes; // amplitudes for line lengths
private int width; // width of this View
private int height; // height of this View
private Paint linePaint; // specifies line drawing characteristics
// constructor
public VisualizerView(Context context, AttributeSet attrs) {
super(context, attrs); // call superclass constructor
linePaint = new Paint(); // create Paint for lines
linePaint.setColor(Color.parseColor("#a4410e")); // set color to green
linePaint.setStrokeWidth(LINE_WIDTH); // set stroke width
}
// called when the dimensions of the View change
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
width = w; // new width of this View
height = h; // new height of this View
amplitudes = new ArrayList<Float>(width/LINE_WIDTH);
}
// clear all amplitudes to prepare for a new visualization
public void clear() {
amplitudes.clear();
}
// add the given amplitude to the amplitudes ArrayList
public void addAmplitude(float amplitude) {
amplitudes.add(amplitude); // add newest to the amplitudes ArrayList
// if the power lines completely fill the VisualizerView
if (amplitudes.size() * LINE_WIDTH >= width) {
amplitudes.remove(0); // remove oldest power value
}
}
// draw the visualizer with scaled lines representing the amplitudes
@Override
public void onDraw(Canvas canvas) {
int middle = height/2; // get the middle of the View
float curX = 0; // start curX at zero
// for each item in the amplitudes ArrayList
for (float power : amplitudes) {
float scaledHeight = power/LINE_SCALE; // scale the power
curX += LINE_WIDTH; // increase X by LINE_WIDTH
Log.e("crux",String.valueOf(curX));
// draw a line representing this item in the amplitudes ArrayList
canvas.drawLine(curX, middle + scaledHeight/2, curX, middle
- scaledHeight/2, linePaint);
}
}
}
drauf Fest von so vielen Stunden bitte jemand mich aus ihm heraus
Ändern Können Sie mir bitte mitteilen, wie Sie diese Sache umgesetzt? Ich meine, wie man diese Klasse verwendet, um die Wellenform zu zeigen? –