参考と言うかまんまなのはここ。
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;
今回の変更は前回の修正と、まあ、色々と。
とりあえず、参考にしたのはこことここ。この書き方良くないですかね。
まあ、変える気はありませんが。今のとこ。
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()
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 件のコメント:
コメントを投稿