简体   繁体   English

在Android中使用seekbar

[英]Using seekbar in android

I am making an android application where i got a seekbar for some music. 我正在制作一个Android应用程序,其中有一些音乐的搜索栏。 I got the seekbar to show the music playing status, where i currently am in the music playback. 我找到了搜索栏,以显示音乐播放状态,当前我在音乐播放中。 But how can i setup a listener so that i can say that the mediaplayer would play a specific place on a track? 但是我如何设置一个侦听器,以便可以说媒体播放器将在轨道上播放特定位置? I know the code for setting the play time in mediaplayer, but how can i handle the click events from seekbar? 我知道在Mediaplayer中设置播放时间的代码,但是我该如何处理seekbar中的单击事件? like onClick() or anything similar? 像onClick()或类似的东西?

FIXED: My code: 修正:我的代码:

package com.mycompany.appname;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import android.app.ListActivity;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.os.Environment;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;
import android.widget.SlidingDrawer;

public class MusicActivity extends ListActivity implements OnClickListener, OnSeekBarChangeListener {
//Called when the activity is first created
List<String> myList = new ArrayList<String>();
EditText AddItemToListViewEditText;
  static final String[] COUNTRIES = new String[] {
      "Movies"
      };
  MediaPlayer mp1;
  String musicUri;
  Button PausePlay;
  int positionInt;
  SlidingDrawer slidingDrawer2;
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.musicscreen);

    //Import views
    PausePlay = (Button)findViewById(R.id.PausePlay);
    slidingDrawer2 = (SlidingDrawer)findViewById(R.id.slidingDrawer2);

    //Setup onClickListener for the buttons
    PausePlay.setOnClickListener(this);

    //Setup mediaPlayer
    mp1 = new MediaPlayer();

    //Setup ListView
    setListAdapter((ListAdapter) new ArrayAdapter<String>(this, R.layout.list_item, COUNTRIES));
    setListAdapter((ListAdapter) new ArrayAdapter<String>(this, R.layout.list_item, myList));

    //Setup seekBar
    final SeekBar progress = (SeekBar)findViewById(R.id.musicProgressBar);
    progress.setOnSeekBarChangeListener(this);

    ListView lv = getListView();
    lv.setTextFilterEnabled(true);

    File mFile = new File(Environment.getExternalStorageDirectory() + "/Music/");
    myList.addAll(Arrays.asList(mFile.list()));
    setListAdapter((ListAdapter) new ArrayAdapter<String>(this, R.layout.list_item, myList));

    lv.setOnItemClickListener(new OnItemClickListener() {
      public void onItemClick(AdapterView<?> parent, View view,
          int position, long id) {
        //When an item is clicked, play it on a MediaPlayer
          //Play song
          positionInt = position;
          if (mp1.isPlaying()) {
              //Reset mediaPlayer
              mp1.reset();
              try {
                  musicUri = Environment.getExternalStorageDirectory() + "/Music/" + myList.get(positionInt);
                mp1.setDataSource(musicUri);
                mp1.prepare();
                mp1.start();
                slidingDrawer2.animateOpen();
            } catch (IllegalArgumentException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IllegalStateException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
          } else {
          try {
              musicUri = Environment.getExternalStorageDirectory() + "/Music/" + myList.get(position);
            mp1.setDataSource(musicUri);
            mp1.prepare();
            mp1.start();
            slidingDrawer2.animateOpen();
        } catch (IllegalArgumentException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IllegalStateException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

          //Setup seekBar
          final SeekBar progress = (SeekBar)findViewById(R.id.musicProgressBar);
          progress.setProgress(0);
          progress.setMax(mp1.getDuration());
          new CountDownTimer(mp1.getDuration(), 250) {
            public void onTick(long millisUntilFinished) {
                if (progress.getProgress() == mp1.getDuration()) {
                    mp1.reset();
                    progress.setProgress(0);
                } else {
                  progress.setProgress(mp1.getCurrentPosition());
                }
            }
            public void onFinish() {}
          }.start();
        }
  }
    });
}

@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
    if (fromUser == true) {
        mp1.seekTo(seekBar.getProgress());
    } else {
        //Do nothing
    }
}

@Override
public boolean onKeyDown(int KeyCode, KeyEvent event) {
    if ((KeyCode == KeyEvent.KEYCODE_BACK)) {
        if (mp1.isPlaying()) {
            mp1.reset();
            System.exit(0);
        } else {
            finish();
        }
        return true;
    }
    return super.onKeyDown(KeyCode, event);
}

public void onClick(View src) {
    switch(src.getId()) {
    case R.id.PausePlay:
        if (mp1.isPlaying()) {
            mp1.pause();
            PausePlay.setText("Play");
        } else {
            mp1.start();
            PausePlay.setText("Pause");
        }
        break;
    }
}

@Override
public void onStartTrackingTouch(SeekBar seekBar) {
    // TODO Auto-generated method stub
}

@Override
public void onStopTrackingTouch(SeekBar seekBar) {
    // TODO Auto-generated method stub
}
}

My xml: 我的xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >


<TextView
    android:id="@+id/textView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Musikk"
    android:textAppearance="?android:attr/textAppearanceLarge" />

<FrameLayout
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" >




    <ListView
        android:id="@+android:id/list"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" >

    </ListView>


    <SlidingDrawer
        android:id="@+id/slidingDrawer2"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:content="@+id/content"
        android:handle="@+id/handle" >


        <Button
            android:id="@+id/handle"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Spiller nå" />


        <LinearLayout
            android:id="@+id/content"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:orientation="vertical" >


            <SeekBar
                android:id="@+id/musicProgressBar"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content" />

            <LinearLayout
                android:layout_width="fill_parent"
                android:layout_height="wrap_content" >













                <Button
                    android:id="@+id/PausePlay"
                    android:layout_width="fill_parent"
                    android:layout_height="wrap_content"
                    android:text="Pause" />

            </LinearLayout>

        </LinearLayout>
    </SlidingDrawer>

</FrameLayout>

</LinearLayout>

You'll want to implement SeekBar.OnSeekBarChangeListener , then implement the onProgressChanged method. 您将要实现SeekBar.OnSeekBarChangeListener ,然后实现onProgressChanged方法。

This is called when the progress is changed (eg a user click somewhere on the seekbar), and will provide you with the new position. 当进度更改时(例如,用户单击搜索栏上的某处),将调用此方法,它将为您提供新的职位。

Example: 例:

public void onProgressChanged (SeekBar seekBar, int progress, boolean fromUser) {
    // Do something
}

Don't forget to register the OnSeekBarChanged listener with seekBar.setOnseekBarChangeListener 不要忘记向seekBar.setOnseekBarChangeListener注册OnSeekBarChanged侦听

public void onProgressChanged(SeekBar seekBar, int progress,
                    boolean fromUser) {
                // TODO Auto-generated method stub
                if (fromUser) {
                    mp1.seekTo(progress);
                    seekBar.setProgress(progress);
                }

            }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM