音楽プレーヤー制作ログをからかう(一)
私はプログラミングが大好きで、1つのプロジェクトを见るのが好きで、最初の何行のコードからゆっくりといくつかのクラスになって、何千行のコード.振り返ってみると、これはすべて1つのアルファベットの1つの言叶で打ったのです.とても楽しいと感じます...
残念ながら、授业が终わった后、私达になることができなくて、心の中はとても残念です...今覚えていることも多くなくて、これで放弃したくありません..そこで简単な地元の音楽プレーヤーを作ることを决めました...前にすでに书いて、ネット上で多くの资料を参考にしました.皆さん、多くの指导を望んで...今は3/1を完成したでしょう...私は半人前としか言えません.すばらしいコードは書けません..
残念なことに、私は书く时にサービスを加入していないで、今フロントで放送するしかありません..后で改善することができることを望みます..
現在の実装機能:
1,MediaStoreツールを通じて携帯電話の中の全部の音楽のファイルを読み取って、そして1つのListViewの上で表示します;
2.GestureDetectorジェスチャーマネージャにより簡単なユーザジェスチャー操作を識別する.
例えば:左右にスライドして、クリックして、長押しします.プレーヤーは異なる操作に対して異なるフィードバックをします;
3,SeekBarプログレスバーは音楽のプログレスを制御する(これは非常に簡単である);
4、実现:シングルサイクル、リストサイクル、ランダム再生、顺番再生、4种类の再生モード.
5,摇一摇ランダム换歌(抄微信摇一摇);
次に、MusicActivity.classのコードをいくつか示します.
1、4種類の再生モードの同じボタン:
次は揺れるコードを貼って、ネット上には多くのバージョンがあります.これは頼りになると思います.
ソースは私が添付ファイルの中で贴って、自分で时间を割いて作ったので、BUGはどれだけあるか分かりません.みんなが喷かないことを望みます.
次の段階で実現する準備をしている点:
1、歌詞;
2,Service;
3,ネットワーク機能(資料が見つかったら);
差は多くないでしょう、これらは私にとってとても忙しいです.へへ.
最后に、みんなの仕事が顺调であることを望んで、私も1部の私达の仕事を探し当てることができることを祈ります.
残念ながら、授业が终わった后、私达になることができなくて、心の中はとても残念です...今覚えていることも多くなくて、これで放弃したくありません..そこで简単な地元の音楽プレーヤーを作ることを决めました...前にすでに书いて、ネット上で多くの资料を参考にしました.皆さん、多くの指导を望んで...今は3/1を完成したでしょう...私は半人前としか言えません.すばらしいコードは書けません..
残念なことに、私は书く时にサービスを加入していないで、今フロントで放送するしかありません..后で改善することができることを望みます..
現在の実装機能:
1,MediaStoreツールを通じて携帯電話の中の全部の音楽のファイルを読み取って、そして1つのListViewの上で表示します;
2.GestureDetectorジェスチャーマネージャにより簡単なユーザジェスチャー操作を識別する.
例えば:左右にスライドして、クリックして、長押しします.プレーヤーは異なる操作に対して異なるフィードバックをします;
3,SeekBarプログレスバーは音楽のプログレスを制御する(これは非常に簡単である);
4、実现:シングルサイクル、リストサイクル、ランダム再生、顺番再生、4种类の再生モード.
5,摇一摇ランダム换歌(抄微信摇一摇);
次に、MusicActivity.classのコードをいくつか示します.
1、4種類の再生モードの同じボタン:
//
@Override
public void onClick(View v) {
if (mediaUtils.isPlay()) {
if (isLoop == false && isAllLoop == false && isShuff == false) { //
button.setBackgroundResource(R.drawable.mediap_cycleone);
isLoop = true;
isAllLoop = false;
isShuff = false;
mediaUtils.loopPlay(isLoop);
showTag(" ");
return;
} else if (isAllLoop == false && isLoop == true
&& isShuff == false) {//
button.setBackgroundResource(R.drawable.mediap_cycleall);
isAllLoop = true;
isLoop = false;
isShuff = false;
mediaUtils.loopPlay(isLoop);
showTag(" ");
return;
} else if (isShuff == false) {
button.setBackgroundResource(R.drawable.mediap_random);
isShuff = true;
mediaUtils.setShuff(isShuff);
isLoop = false;
isAllLoop = false;
mediaUtils.loopPlay(isLoop);
showTag(" ");
return;
} else {
//
button.setBackgroundResource(R.drawable.mediap_order);
isShuff = false;
isLoop = false;
isAllLoop = false;
mediaUtils.loopPlay(isLoop);
showTag(" ");
return;
}
} else {
showTag(" ~~");
}
}
, , ..
(isLoop,isAllLoop,isShuff), background. , . .
次は揺れるコードを貼って、ネット上には多くのバージョンがあります.これは頼りになると思います.
public class MusicShake implements SensorEventListener {
//
private SensorManager sensorManager = null;
//
private Sensor sensor = null;
//
private static final int SPEED_SHRESHOLD = 3000;
//
private static final int UPTATE_INTERVAL_TIME = 70;
//
private OnShakeListener onShakeListener;
//
private Context mContext;
// ( , , )
private float lastX;
private float lastY;
private float lastZ;
//
private long lastUpdateTime;
// " "
public MusicShake(Context context) {
this.mContext = context;
Start();
}
//
private void Start() {
//
sensorManager = (SensorManager) mContext
.getSystemService(Context.SENSOR_SERVICE);
if (sensorManager != null) {
//
sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
}
//
RegisterListener();
}
//
private void RegisterListener() {
if (sensor != null) {
// . Game
sensorManager.registerListener(this, sensor,
SensorManager.SENSOR_DELAY_GAME);
}
}
//
public void unRegisterListener() {
sensorManager.unregisterListener(this);
}
//
public void setOnShakeListener(OnShakeListener onShakeListener) {
this.onShakeListener = onShakeListener;
}
//
public interface OnShakeListener {
//
void OnShake();
// ~~~~~( , );
}
@Override
public void onAccuracyChanged(Sensor arg0, int arg1) {
// TODO Auto-generated method stub
}
@Override
public void onSensorChanged(SensorEvent event) {
// TODO Auto-generated method stub
//
long currentUpdateTime = System.currentTimeMillis();
//
long timeInterval = currentUpdateTime - lastUpdateTime;
if (timeInterval < UPTATE_INTERVAL_TIME)
return;
//
lastUpdateTime = currentUpdateTime;
//
float x = event.values[0];
float y = event.values[1];
float z = event.values[2];
//
float deltaX = x - lastX;
float deltaY = x - lastY;
float deltaZ = x - lastZ;
//
lastX = x;
lastY = y;
lastZ = z;
// .
double speed = Math.sqrt(deltaX * deltaX + deltaY * deltaY + deltaZ
* deltaZ)
/ timeInterval * 10000;
Log.v("theLog", "================" + speed + "================");
// , log, ......
// , .
if (speed >= SPEED_SHRESHOLD) {
onShakeListener.OnShake();
}
}
, , , ..
ソースは私が添付ファイルの中で贴って、自分で时间を割いて作ったので、BUGはどれだけあるか分かりません.みんなが喷かないことを望みます.
次の段階で実現する準備をしている点:
1、歌詞;
2,Service;
3,ネットワーク機能(資料が見つかったら);
差は多くないでしょう、これらは私にとってとても忙しいです.へへ.
最后に、みんなの仕事が顺调であることを望んで、私も1部の私达の仕事を探し当てることができることを祈ります.