このブログを検索

mediaplayerを作ってみる(7)

2010年11月30日火曜日

|
(5)のしたの方に書いたのをもう一度載せときます。

参考と言うかまんまなのはここ

Android Manifestのactivityのとこを、

        <activity android:name=".SDMediaPlayerActivity"
                  android:label="@string/app_name"
                  android:screenOrientation="portrait"
                  android:configChanges="orientation|keyboardHidden">

こんな感じに、下2行追加しておくと、縦画面固定で
横にしても音楽が、かかりっぱなしの暴走をしなくなります。
横画面を切り替えたい方は、頑張ってください。僕は縦固定で。

後、MediaPlayerでサポートされてるファイル形式はここ

今回の変更は前回の修正と、まあ、色々と。

とりあえず、参考にしたのはここここ。この書き方良くないですかね。
まあ、変える気はありませんが。今のとこ。

rowdata.xml

<?xml version="1.0" encoding="utf-8"?>
<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/checkedTextView"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:minHeight="?android:attr/listPreferredItemHeight"
    android:paddingLeft="10dip"
    android:gravity="center"
    android:textColor="@color/green">
</CheckedTextView>

CheckedTextView。まんまです。
で、 MusicListAdapter classを作成

package net.asasvata.sdmediaplayer;

import java.util.ArrayList;

import android.content.Context;
import android.graphics.Color;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.CheckedTextView;
import android.widget.ListView;
//import android.widget.TextView;

public class MusicListAdapter extends ArrayAdapter<String> {
    private LayoutInflater inflater;
    private int layoutId;
    private ListView listView;

    public MusicListAdapter(Context context, int layoutId, ArrayList<String> objects, ListView listView) {
        super(context, 0, objects);
        this.inflater =
            (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        this.layoutId = layoutId;
       
        this.listView = listView;

    }
   
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        if (convertView == null) {
            convertView = inflater.inflate(layoutId, parent, false);
        }
        //String data = getItem(position);
        ((CheckedTextView)convertView).setText((position + 1) + ": " +
                listView.getItemAtPosition(position).toString());
        if(position == listView.getCheckedItemPosition())
            ((CheckedTextView)convertView).setBackgroundColor(Color.DKGRAY);
        else
            ((CheckedTextView)convertView).setBackgroundColor(Color.TRANSPARENT);
         return convertView;
    }
}

表示内容以外はそのままです。有難い。中身は、よく分かりませんが。
次は、MusicPlayer。フィールドに

private ListView listView;

を追加。それから、コンストラクタの引数に

ListView lv

を追加。コンストラクタの中に

listView = lv;

を追加。で、playMusicの中、setTitleの下あたりに

        listView.clearChoices();
        listView.setItemChecked(musicNum, true);
        listView.setSelection(musicNum); 

を追加。なんかこれがいいみたい。色々試した結果。
僕のイメージには、あってる。今のところ。
そいから、Activity。フィールドに

private int musicNum_listClicked;

なんか変な名前。まあ、ね。
で、onCreateの中を、


listView = (ListView)findViewById(R.id.listView);//ここは、前と同じ。上書き。
        listView.setItemsCanFocus(false);
        listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
       
        //MusicListAdapterの生成
        MusicListAdapter listAdapter =
                new MusicListAdapter(this, R.layout.rowdata, musicList, listView);


んな感じ。それから、onItemClickの中を

        listPosition = position;//ここは、前と同じ。上書き。
        musicNum_listClicked = musicPlayer.getMusicNum();
        changeMusicFlag = true;

に変更。setTitleは削除。
 で、onClickStartを

    public void onClickStart(View view) {
        if (!musicPlayer.isPlaying()){
          
            //停止中にlistViewで曲変更した場合
            if (changeMusicFlag) {
              
                musicPlayer.setMusicNum(listPosition);
                musicPlayer.playMusic();
                changeMusicFlag = false;
            }
          
            if (pauseFlag) {    //一時停止中なら
              
                musicPlayer.start();
                pauseFlag = false;
              
            } else {
              
                musicPlayer.playMusic();
                changeMusicFlag = false;
            }
        }
        //再生中で曲選択が変わってたら。つまり、listViewで選択した場合です。
        if (changeMusicFlag && musicNum_listClicked 
== musicPlayer.getMusicNum()) {  

            musicPlayer.setMusicNum(listPosition);
            musicPlayer.playMusic();
            changeMusicFlag = false;          
        } else {
            changeMusicFlag = false;
        }
    }

どこを変えたか分かりにくいので。

musicNum_listClicked == musicPlayer.getMusicNum()
これ↑は、 連続再生で次に進んでなかったらと言うことです。
後、setTitle()の中の、
changeMusicFlag = ture;を
changeMusicFlag = false;に。
間違ってました。

動きとしては、

停止中
・listViewをクリックするとグレーになる。
・listViewをクリックしただけではタイトルは変わらない。
・再生するとタイトルも変わる。
・進む、戻るはタイトルが変わる。listViewの色は変わらない。
・listViewクリックと進む、戻るは最後の選択が有効。

再生中
・listViewの動きは停止中と同じ。連続再生で次の曲にいくまで有効。
・進む、戻るは曲・タイトル・listViewすべて変わる。

多分。そんな感じ。要確認。
次は、spinner。名前が好きなので。使います。予定ですが。

0 コメント:

コメントを投稿

 

Lorem

ページビューの合計