当媒体播放器在 xamarin android 上播放时,SeekBar 不会 运行

SeekBar won't run when media player are playing on xamarin android

SeekBar 小部件是一个交互式滑块,允许用户select 从一系列值中选择一个值。当用户向左或向右移动滑块时,SeekBar 的值将发生变化

public int getProgressPercentage(int currentDuration, int totalDuration)
{
    int percentage;

    int currentSeconds = (int)(currentDuration / 1000);
    int totalSeconds = (int)(totalDuration / 1000);

    //calculating percentage

    percentage = (((int)currentSeconds) / totalSeconds) * 100;

    return percentage;
}
public void UpdatedTimerTask()
{
    //Displaying time
    //txtCurrentTimer.Text = utils.miliSecondsTotimer (player.CurrentPosition);
    //txtTotalTimer.Text = utils.miliSecondsTotimer (player.Duration);

    //Updating progress bar(seekbar)
    int progress=(int)(utils.getProgressPercentage(player.CurrentPosition,player.Duration));
    seekBar.Progress = progress;
}

void SeekBar_ProgressChanged (object sender, SeekBar.ProgressChangedEventArgs e)
{
    UpdatedTimerTask ();
}

public void StartMedia(string url_string)
{

    player = new MediaPlayer ();
    seekBar.Progress = 0;
    seekBar.Max = 100;
    player.Reset ();
    player.SetAudioStreamType (Stream.Music);
    player.SetDataSource(url_string);
    player.Prepare();
    player.Start ();
    imgPlayorPause.SetImageResource (Resource.Drawable.ic_pause_black_36dp);
    UpdatedTimerTask ();
}

seekBar.SetOnSeekBarChangeListener (this); 有一些无效参数。

媒体播放器播放时,SeekBar 不会运行。

您有两个选择:

SetOnSeekBarChangeListener()

如果您想使用 SetOnSeekBarChangeListener,您必须在 this 的 class 中实现 IOnSeekBarChangeListener(通常是您的 activity。缺点 是,你只能有一个事件侦听器。

[Activity]
public class MyActivity : Activity, SeekBar.IOnSeekBarChangeListener
{
    protected override void OnCreate(Bundle bundle)
    {
        // ...
        seekbar.SetOnSeekBarChangeListener(this);
    }

    public void OnProgressChanged(SeekBar seekBar, int progress, bool fromUser)
    {
        // do some stuff
    }

    public void OnStartTrackingTouch(SeekBar seekBar)
    {
    }

    public void OnStopTrackingTouch(SeekBar seekBar)
    {
    }
}

ProgressChanged 事件

Xamarin 将 Java 类调用方法 SetXyzListener 映射到名为 Xyz 的事件。 如果你想使用 ProgressChanged,你必须用 seekbar.ProgressChanged += SeekbarOnProgressChanged 注册你的处理程序。 缺点 是,当您不再需要该事件时,您必须确保使用 seekbar.ProgressChanged -= SeekbarOnProgressChanged 删除处理程序。您应该在已添加处理程序的生命周期方法的对应部分中执行此操作。在下面的示例中,我使用了 OnResumeOnPause.

[Activity]
public class MyActivity : Activity
{
    protected override void OnCreate(Bundle bundle)
    {
        base.OnCreate(bundle);
        // ...
    }

    protected override void OnResume()
    {
        base.OnResume();
        seekbar.ProgressChanged += SeekbarOnProgressChanged;
    }

    protected override void OnPause()
    {
        seekbar.ProgressChanged -= SeekbarOnProgressChanged;
        base.OnPause();
    }

    private void SeekbarOnProgressChanged(object sender, SeekBar.ProgressChangedEventArgs progressChangedEventArgs)
    {
        // do some stuff
    }
}