このブログを検索

mediaplayerを作ってみる(6)-1

2010年11月28日日曜日

|
今更ですが、target は Android1.6です。
かなり変更してしまいました。2回に分けて載せときます。
とりあえず、string.xmlから。

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="app_name">SDMP</string>
    <string name="back_button">戻る</string>
    <string name="next_button">進む</string>
    <string name="start_button">再生</string>
    <string name="pause_button">一時停止</string>
    <string name="stop_button">停止</string>
    <string name="skip_button">skip</string>
    <color name="violet">#400a40</color>
    <color name="black">#010101</color>
    <color name="green">#40e91f</color>
    <color name="red">#b00a0a</color>
</resources>

ボタンが増えて、色も変えてます。
 次は、main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@color/violet">
    <TextView
        android:id="@+id/titleView"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:textSize="16sp"
        android:background="@color/black"
        android:textColor="@color/red">
    </TextView>
    <ListView
        android:id="@+id/listView"
        android:layout_width="fill_parent"
        android:layout_height="240dp">
    </ListView>
    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="fill_parent"
        android:layout_height="30dp"
        android:background="@color/red">
           <Button
            android:id="@+id/backButton"
            android:layout_width="wrap_content"
            android:layout_height="30dp"
            android:layout_weight="1"
            android:gravity="center"
            android:background="@color/black"
            android:textColor="@color/red"
            android:text="@string/back_button"
            android:onClick="onClickBack">
        </Button>
           <Button
            android:id="@+id/nextButton"
            android:layout_width="wrap_content"
            android:layout_height="30dp"
            android:layout_weight="1"
            android:gravity="center"
            android:background="@color/black"
            android:textColor="@color/red"
            android:text="@string/next_button"
            android:onClick="onClickNext">
        </Button>
           <Button
            android:id="@+id/startButton"
            android:layout_width="wrap_content"
            android:layout_height="30dp"
            android:layout_weight="2"
            android:background="@color/black"
            android:textColor="@color/red"
            android:text="@string/start_button"
            android:onClick="onClickStart">
        </Button>
           <Button
            android:id="@+id/pauseButton"
            android:layout_width="wrap_content"
            android:layout_height="30dp"
            android:layout_weight="1"
            android:background="@color/black"
            android:textColor="@color/red"
            android:text="@string/pause_button"
            android:onClick="onClickPause">
        </Button>
        <Button
            android:id="@+id/stopButton"
            android:layout_width="wrap_content"
            android:layout_height="30dp"
            android:layout_weight="1"
            android:gravity="center"
            android:background="@color/black"
            android:textColor="@color/red"
            android:text="@string/stop_button"
            android:onClick="onClickStop">
        </Button>
    </LinearLayout>
    <Button
        android:id="@+id/skipButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/skip_button"
        android:onClick="onClickSkip">
    </Button>
</LinearLayout>

色と文字の配置が増えてます。前作ってたのより増えてる。色々。
次は、ListViewのレイアウト rowdata.xml。 res/layoutの下に配置。

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/textView"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:textColor="@color/green">
</TextView>

ほぼ、javadrive
 次は、MusicPlayer classを載せときます。

package net.asasvata.sdmediaplayer;

import java.io.File;
import java.util.ArrayList;

import android.media.MediaPlayer;
import android.os.Environment;
import android.util.Log;
import android.widget.TextView;

public class MusicPlayer extends MediaPlayer
                implements MediaPlayer.OnCompletionListener {
   
    private static final String SD_PATH = //SDのパス
        Environment.getExternalStorageDirectory().getPath();
    private static final String FILE_SEP = File.separator;//pathの区切り文字
   
    private ArrayList<String> musicList;
    private int musicNum;
   
    private TextView titleView;//タイトル表示用
   
    //引数にTextView追加。
    public MusicPlayer(ArrayList<String> list, TextView tv) {
       
        super();
        this.musicList = list;
        titleView = tv;
        musicNum = 0;
       
        super.setOnCompletionListener(this);
    }
   
    public int getMusicNum() {
        return musicNum;
    }
   
    public void setMusicNum(int num) {
        musicNum = num;
    }
   
    //音楽ファイルのパスを取得してスタート。
    public void playMusic() {
       
        super.stop();
        super.reset();//これが要る様だ。
        setTitle();
       
        try{
            super.setDataSource(SD_PATH + FILE_SEP + "deepfm"
                    + FILE_SEP + musicList.get(musicNum));
           
            super.prepare();
            super.seekTo(0);
            super.start();
           
        } catch (Exception e) {
            Log.v("playMusic", "" + e);//なんとなく変更。
        }
    }
   
    //残り3秒まで飛びます。
    public void skipMusic() {
       
        int duration = super.getDuration();
        super.seekTo(duration - 3000);
    }
       
    //曲が終わったときの処理
    public void onCompletion(MediaPlayer mp) {
        if (++musicNum < musicList.size()) {
           
            playMusic();
           
        } else {
           
            musicNum = 0;
            playMusic();
        }
       
    }
   
    //タイトルをセット。
    public void setTitle() {
        titleView.setText((musicNum + 1) + ": " + musicList.get(musicNum));
    }
}

次の回へ。

0 コメント:

コメントを投稿

 

Lorem

ページビューの合計