成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

逗逼音樂(lè)播放器制作日志(一)<附源碼>-創(chuàng)新互聯(lián)

我很喜歡編程,喜歡看到一個(gè)項(xiàng)目,從最初的幾行代碼慢慢變成好幾個(gè)類(lèi),幾千行代碼.回頭看看,這都是一個(gè)字母一個(gè)詞語(yǔ)打出來(lái)的.就會(huì)覺(jué)得很開(kāi)心...

網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)!專(zhuān)注于網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、微信小程序開(kāi)發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶(hù)創(chuàng)新互聯(lián)還提供了興山免費(fèi)建站歡迎大家使用!

    曾經(jīng)去報(bào)讀過(guò)專(zhuān)業(yè)課程.可惜課程完畢后無(wú)緣成為一名碼農(nóng),心里很是遺憾...現(xiàn)在記著的也不多了,不想就此放棄..于是決定制作一個(gè)簡(jiǎn)單的本地音樂(lè)播放器吧...之前已經(jīng)寫(xiě)了點(diǎn),網(wǎng)上參考了很多資料.希望各位大牛,多多指點(diǎn)...現(xiàn)在算是完成了3/1吧...我只能算是個(gè)半吊子,寫(xiě)不出什么精彩的代碼..

    非??上У氖?我在寫(xiě)的時(shí)候沒(méi)有將Service加入,導(dǎo)致現(xiàn)在只能前臺(tái)播放..希望以后可以改進(jìn)吧..

目前實(shí)現(xiàn)功能:

1,通過(guò)MediaStore工具讀取手機(jī)中的全部音樂(lè)文件,并顯示在一個(gè)ListView上;

2,通過(guò)GestureDetector手勢(shì)管理器識(shí)別簡(jiǎn)單的用戶(hù)手勢(shì)操作.

    如:左右滑動(dòng),點(diǎn)擊,長(zhǎng)按.播放器對(duì)不同操作做出不同的反饋;

3,SeekBar進(jìn)度條控制音樂(lè)進(jìn)度(這個(gè)非常簡(jiǎn)單);

4,實(shí)現(xiàn):單曲循環(huán),列表循環(huán),隨機(jī)播放,順序播放,四種播放模式.(比較笨的辦法實(shí)現(xiàn)的);

5,搖一搖隨機(jī)換歌(抄微信搖一搖的);

下面是幾個(gè)MusicActivity.class的代碼:

1,四種播放模式同一按鈕上:

// 模式按鈕被單擊
		@Override
		public void onClick(View v) {
			if (mediaUtils.isPlay()) {
				if (isLoop == false && isAllLoop == false && isShuff == false) { // 單曲循環(huán)
					button.setBackgroundResource(R.drawable.mediap_cycleone);
					isLoop = true;
					isAllLoop = false;
					isShuff = false;
					mediaUtils.loopPlay(isLoop);
					showTag("單曲循環(huán)");
					return;
				} else if (isAllLoop == false && isLoop == true
						&& isShuff == false) {// 列表循環(huán)
					button.setBackgroundResource(R.drawable.mediap_cycleall);
					isAllLoop = true;
					isLoop = false;
					isShuff = false;
					mediaUtils.loopPlay(isLoop);
					showTag("列表循環(huán) ");
					return;
				} else if (isShuff == false) {
					button.setBackgroundResource(R.drawable.mediap_random);
					isShuff = true;
					mediaUtils.setShuff(isShuff);
					isLoop = false;
					isAllLoop = false;
					mediaUtils.loopPlay(isLoop);
					showTag("隨機(jī)播放 ");
					return;
				} else {
					// 恢復(fù)正常
					button.setBackgroundResource(R.drawable.mediap_order);
					isShuff = false;
					isLoop = false;
					isAllLoop = false;
					mediaUtils.loopPlay(isLoop);
					showTag("順序播放");
					return;
				}
			} else {
				showTag("先選個(gè)歌聽(tīng)吧~~");
			}
		}
		
    個(gè)人覺(jué)得這個(gè)方式比較笨,但是又不會(huì)其他的方式,所以只能先這樣了..
主要就是根據(jù)不同條件(isLoop,isAllLoop,isShuff),讓按鈕加載不同的background.雖然功能可以用了,但是代碼量大重復(fù)性高.希望大牛們能指點(diǎn)我一下.


下面貼上搖一搖的代碼,網(wǎng)上有很多版本的,我覺(jué)得這個(gè)比較靠譜:

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;
	// 感應(yīng)器接口
	private OnShakeListener onShakeListener;
	// 環(huán)境
	private Context mContext;
	// 三軸(水平,垂直,橫向)
	private float lastX;
	private float lastY;
	private float lastZ;
	// 上次搖晃時(shí)間
	private long lastUpdateTime;

	// 構(gòu)造方法中初始化"環(huán)境"并獲得感應(yīng)器
	public MusicShake(Context context) {
		this.mContext = context;

		Start();

	}

	// 開(kāi)始檢測(cè)監(jiān)聽(tīng)
	private void Start() {
		// 獲得感應(yīng)器服務(wù)
		sensorManager = (SensorManager) mContext
				.getSystemService(Context.SENSOR_SERVICE);
		if (sensorManager != null) {
			// 獲取重力感應(yīng)器
			sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);

		}
		// 獲取后注冊(cè)感應(yīng)器
		RegisterListener();

	}

	// 注冊(cè)
	private void RegisterListener() {
		if (sensor != null) {
			// 注冊(cè)監(jiān)聽(tīng)模式.我選擇的是Game模式
			sensorManager.registerListener(this, sensor,
					SensorManager.SENSOR_DELAY_GAME);
		}

	}

	// 解除注冊(cè)
	public void unRegisterListener() {
		sensorManager.unregisterListener(this);
	}

	// 綁定監(jiān)聽(tīng)
	public void setOnShakeListener(OnShakeListener onShakeListener) {
		this.onShakeListener = onShakeListener;

	}

	// 感應(yīng)器接口
	public interface OnShakeListener {
		// 實(shí)現(xiàn)方法
		void OnShake();
		// ~~~~~(要干的事情,其實(shí)是在引用類(lèi)中實(shí)現(xiàn));

	}

	@Override
	public void onAccuracyChanged(Sensor arg0, int arg1) {
		// TODO Auto-generated method stub

	}

	@Override
	public void onSensorChanged(SensorEvent event) {
		// TODO Auto-generated method stub
		// 獲取當(dāng)前時(shí)間
		long currentUpdateTime = System.currentTimeMillis();
		// 獲取時(shí)間間隔
		long timeInterval = currentUpdateTime - lastUpdateTime;
		if (timeInterval < UPTATE_INTERVAL_TIME)
			return;
		// 初始化上一次的時(shí)間
		lastUpdateTime = currentUpdateTime;
		// 獲取初始三軸的數(shù)據(jù)
		float x = event.values[0];
		float y = event.values[1];
		float z = event.values[2];
		// 獲取運(yùn)動(dòng)后三軸的數(shù)據(jù)
		float deltaX = x - lastX;
		float deltaY = x - lastY;
		float deltaZ = x - lastZ;
		// 重置三軸數(shù)據(jù)
		lastX = x;
		lastY = y;
		lastZ = z;
		// 網(wǎng)上抄的.
		double speed = Math.sqrt(deltaX * deltaX + deltaY * deltaY + deltaZ
				* deltaZ)
				/ timeInterval * 10000;
				
		Log.v("theLog", "================" + speed + "================");
		//如果不是測(cè)試的話(huà),請(qǐng)刪掉上面這行l(wèi)og,因?yàn)樗鼤?huì)不停的檢測(cè)......
		// 如果速率大于閥值,那么執(zhí)行接口方法.
		if (speed >= SPEED_SHRESHOLD) {
			onShakeListener.OnShake();
		}
	}
這是我網(wǎng)上看來(lái)的,沒(méi)啥好說(shuō)的,就是注釋什么我自己寫(xiě)的,可能有不對(duì)的地方..


源碼我貼在附件里面,因?yàn)槭亲约撼闀r(shí)間做的,BUG不知道得有多少.希望大家勿噴.

下一階段準(zhǔn)備實(shí)現(xiàn)的幾點(diǎn):

1,歌詞;

2,Service;

3,網(wǎng)絡(luò)功能(如果找得到資料的話(huà));

差不多吧,這些對(duì)于我來(lái)說(shuō)夠忙活一段時(shí)間的了.嘿嘿.

最后,希望大家工作順心,也祝我能找到一份碼農(nóng)的工作.

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線(xiàn),公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性?xún)r(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專(zhuān)為企業(yè)上云打造定制,能夠滿(mǎn)足用戶(hù)豐富、多元化的應(yīng)用場(chǎng)景需求。

當(dāng)前文章:逗逼音樂(lè)播放器制作日志(一)&lt;附源碼&gt;-創(chuàng)新互聯(lián)
網(wǎng)址分享:http://jinyejixie.com/article36/dehcpg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站建設(shè)Google、手機(jī)網(wǎng)站建設(shè)、網(wǎng)站改版、動(dòng)態(tài)網(wǎng)站網(wǎng)站排名

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

網(wǎng)站托管運(yùn)營(yíng)
天台县| 双江| 延长县| 额尔古纳市| 天水市| 吴川市| 太保市| 芜湖市| 洞口县| 德庆县| 南充市| 彝良县| 宁南县| 通渭县| 台江县| 孟津县| 齐河县| 辉南县| 平和县| 灵川县| 砀山县| 哈尔滨市| 岢岚县| 安西县| 巴青县| 福清市| 区。| 商水县| 平乡县| 东方市| 怀仁县| 浦城县| 邻水| 庆城县| 隆尧县| 新巴尔虎右旗| 依安县| 舒城县| 卫辉市| 廉江市| 汉川市|