1

在此处输入图像描述

我正在尝试使用从文件中获取的字节数组为录制的声音绘制图表,并尝试将其设置为搜索栏的背景。我已经成功绘制到上面显示的数量,但它不准确。为了获得准确的图表,我需要将像素转换为毫秒。实际上,在搜索栏中完成的最大和进度更新以毫秒为单位。但是我正在使用循环内显示宽度的像素绘制图形。所以我想如果我可以将像素转换为毫秒并在里面绘制图形毫秒可以得出一个准确的进度条(希望如此)。

那么谁能帮我将像素转换为毫秒???如果手机的显示宽度是480,我需要将480转换为毫秒,有什么办法吗??帮帮我!!!

width=number of pixels of display width
for (int iPixel = 0; iPixel < width; iPixel++)
            { 
                   {
            int start = (int) ((float) iPixel * ((float) width));
            int end = (int) ((float) (iPixel + 1) * ((float) width));

            for (int i = start; i < end; i++) {
            //code to find the pixel to draw
            }

   //code to draw in canvas
        }
4

1 回答 1

1

试试这个 :

total width(unit) / total file length(milliseconds) = result(unit/milliseconds)

然后移动你的result平局milliseconds

编辑

我的建议是:

1- 设置 SeekBar max=100;并且最小值=0;

2-使用此方法将媒体长度转换为百分比:

public int getProgressPercentage(long currentDuration, long totalDuration){
        Double percentage = (double) 0;

        long currentSeconds = (int) (currentDuration);
        long totalSeconds = (int) (totalDuration);

        // calculating percentage
        percentage =(((double)currentSeconds)/totalSeconds)*100;

        // return percentage
        return percentage.intValue();
    }

然后在 SeekBar 中使用这个 persentsetProgress(getProgressPercentage(long currentDuration, long totalDuration));

3-实现OnSeekBarChangeListener并使用它的progress参数来绘制你的图表:

@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromTouch) {
    // Here use int progress to draw graph. It is percent
    // Current width = 400*percent/100 = result;
    // draw until result value;
}

/**
 * When user starts moving the progress handler
 * */
@Override
public void onStartTrackingTouch(SeekBar seekBar) {}

/**
 * When user stops moving the progress hanlder
 * */
@Override
public void onStopTrackingTouch(SeekBar seekBar) {}

希望这对您有所帮助。

于 2013-03-18T11:55:14.170 回答