続き。(6)-1からの。Activityを。
package net.asasvata.sdmediaplayer;
import java.io.File;
import java.util.ArrayList;
import android.app.Activity;
import android.graphics.Typeface;
import android.os.Bundle;
import android.os.Environment;
import android.view.View;
import android.view.Window;
import android.widget.ArrayAdapter;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.ListView;
import android.widget.TextView;
public class SDMediaPlayerActivity extends Activity
implements AdapterView.OnItemClickListener {
//フィールド
private static final String SD_PATH = //SDのパス
Environment.getExternalStorageDirectory().getPath();
private static final String FILE_SEP = File.separator;//pathの区切り文字
private ArrayList<String> musicList;
private MusicPlayer musicPlayer;
private boolean pauseFlag;//一時停止の判定用
private boolean changeMusicFlag;//musicNumの変更判定用
private int listPosition;//listViewが、クリックされた時の位置を保持
private ListView listView;//ディレクトリ内の曲のリスト表示
private TextView titleView;//現在選択されている曲の表示
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.main);
//musicListの生成と曲の追加
musicList = new ArrayList<String>();
File musicFile = new File(SD_PATH + FILE_SEP + "deepfm");
String[] musicFileList = musicFile.list();
for(String fileName : musicFileList) {
File f = new File(SD_PATH + FILE_SEP + "deepfm"
+ FILE_SEP + fileName);
if(f.isFile() && fileName.endsWith("mp3"))
musicList.add(fileName);
}
listView = (ListView)findViewById(R.id.listView);
//ArrayAdapterの生成
ArrayAdapter<String> listAdapter =
new ArrayAdapter<String>(this, R.layout.rowdata, musicList);
//listViewにlistAdapterをセット。
listView.setAdapter(listAdapter);
//クリックされた事を検知。selectedとの違いは分かってません。
listView.setOnItemClickListener(this);
//musicPlayerの引数に渡すので先に取得
titleView = (TextView)findViewById(R.id.titleView);
//musicPlayerの生成とmusicNumの取得
musicPlayer = new MusicPlayer(musicList, titleView);
//タイトルのセット。flagの初期化も。
setTitle();
}
//とりあえず。
@Override
public void onStop() {
super.onStop();
musicPlayer.stop();
}
//なぜかOverride出来ない。listViewがクリックされた時の処理。
//@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
//曲の選択をするだけ。再生はしない。とりあえず。
listPosition = position;
setTitle(position);
}
//ボタンが押されたときの処理。レイアウトの右から順に。
//戻る
public void onClickBack(View view) {
int n = musicPlayer.getMusicNum() - 1;//とりあえず減らす
if (n < 0) {
n = musicList.size() - 1;//最後の曲を指定
musicPlayer.setMusicNum(n);
if (musicPlayer.isPlaying()) musicPlayer.playMusic();
else setTitle();
} else {
musicPlayer.setMusicNum(n);
if (musicPlayer.isPlaying()) musicPlayer.playMusic();
else setTitle();
}
}
//進む
public void onClickNext(View view) {
int n = musicPlayer.getMusicNum() + 1;//とりあえず増やす。
if (n < musicList.size()) {
musicPlayer.setMusicNum(n);
if (musicPlayer.isPlaying()) musicPlayer.playMusic();
else setTitle();
} else {
n = 0;//1曲目を指定
musicPlayer.setMusicNum(n);
if (musicPlayer.isPlaying()) musicPlayer.playMusic();
else setTitle();
}
}
//再生
public void onClickStart(View view) {
if (!musicPlayer.isPlaying()){
//停止中にlistViewで曲変更した場合
if (musicPlayer.getMusicNum() != listPosition) {
musicPlayer.setMusicNum(listPosition);
musicPlayer.playMusic();
changeMusicFlag = false;
}
if (pauseFlag) { //一時停止中なら
musicPlayer.start();
pauseFlag = false;
} else {
musicPlayer.playMusic();
changeMusicFlag = false;
}
}
if (changeMusicFlag) { //再生中で曲選択が変わってたら。
//つまり、listViewで選択した場合です。
musicPlayer.setMusicNum(listPosition);
musicPlayer.playMusic();
changeMusicFlag = false;
}
}
//一時停止
public void onClickPause(View view) {
if (musicPlayer.isPlaying()) {
musicPlayer.pause();
pauseFlag = true; //ここのみtrueに。
}
}
//停止
public void onClickStop(View view) {
if(musicPlayer.isPlaying()) musicPlayer.stop();
else pauseFlag = false; //一時停止解除
}
//skip。これは、そのまま。
public void onClickSkip(View view) {
if(musicPlayer.isPlaying()) musicPlayer.skipMusic();
}
//タイトルをセット。
public void setTitle() {
pauseFlag = false; //一時停止解除
changeMusicFlag = true;//曲変更のお知らせ。
int n = musicPlayer.getMusicNum();
titleView.setText((n + 1) + ": " + musicList.get(n));
}
//タイトルをセット。listViewがクリックされた時用
public void setTitle(int num) {
pauseFlag = false;
changeMusicFlag = true;
titleView.setText((num + 1) + ": " + musicList.get(num));
}
}
こんな感じ↓。
まあ、アレのイメージです。
前のよりボタンを増やしすぎて、だんだんワケが分からなくなってきた。
進むとか戻るはいるのか。listViewをタッチして再生した方がいいか。
動きが変なとこもあるかも。まあ、だいたいで。
次は、また大きく変わるかも。変わらないかも。
0 件のコメント:
コメントを投稿