<del id="d4fwx"><form id="d4fwx"></form></del>
      <del id="d4fwx"><form id="d4fwx"></form></del><del id="d4fwx"><form id="d4fwx"></form></del>

            <code id="d4fwx"><abbr id="d4fwx"></abbr></code>
          • 逗逼音樂播放器制作日志(一)&lt;附源碼&gt;-創(chuàng)新互聯(lián)

            我很喜歡編程,喜歡看到一個項(xiàng)目,從最初的幾行代碼慢慢變成好幾個類,幾千行代碼.回頭看看,這都是一個字母一個詞語打出來的.就會覺得很開心...

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

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

                非常可惜的是,我在寫的時候沒有將Service加入,導(dǎo)致現(xiàn)在只能前臺播放..希望以后可以改進(jìn)吧..

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

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

            2,通過GestureDetector手勢管理器識別簡單的用戶手勢操作.

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

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

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

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

            下面是幾個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("先選個歌聽吧~~");
            			}
            		}
            		
                個人覺得這個方式比較笨,但是又不會其他的方式,所以只能先這樣了..
            主要就是根據(jù)不同條件(isLoop,isAllLoop,isShuff),讓按鈕加載不同的background.雖然功能可以用了,但是代碼量大重復(fù)性高.希望大牛們能指點(diǎn)我一下.


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

            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;
            	// 上次搖晃時間
            	private long lastUpdateTime;
            
            	// 構(gòu)造方法中初始化"環(huán)境"并獲得感應(yīng)器
            	public MusicShake(Context context) {
            		this.mContext = context;
            
            		Start();
            
            	}
            
            	// 開始檢測監(jiān)聽
            	private void Start() {
            		// 獲得感應(yīng)器服務(wù)
            		sensorManager = (SensorManager) mContext
            				.getSystemService(Context.SENSOR_SERVICE);
            		if (sensorManager != null) {
            			// 獲取重力感應(yīng)器
            			sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
            
            		}
            		// 獲取后注冊感應(yīng)器
            		RegisterListener();
            
            	}
            
            	// 注冊
            	private void RegisterListener() {
            		if (sensor != null) {
            			// 注冊監(jiān)聽模式.我選擇的是Game模式
            			sensorManager.registerListener(this, sensor,
            					SensorManager.SENSOR_DELAY_GAME);
            		}
            
            	}
            
            	// 解除注冊
            	public void unRegisterListener() {
            		sensorManager.unregisterListener(this);
            	}
            
            	// 綁定監(jiān)聽
            	public void setOnShakeListener(OnShakeListener onShakeListener) {
            		this.onShakeListener = onShakeListener;
            
            	}
            
            	// 感應(yīng)器接口
            	public interface OnShakeListener {
            		// 實(shí)現(xiàn)方法
            		void OnShake();
            		// ~~~~~(要干的事情,其實(shí)是在引用類中實(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)前時間
            		long currentUpdateTime = System.currentTimeMillis();
            		// 獲取時間間隔
            		long timeInterval = currentUpdateTime - lastUpdateTime;
            		if (timeInterval < UPTATE_INTERVAL_TIME)
            			return;
            		// 初始化上一次的時間
            		lastUpdateTime = currentUpdateTime;
            		// 獲取初始三軸的數(shù)據(jù)
            		float x = event.values[0];
            		float y = event.values[1];
            		float z = event.values[2];
            		// 獲取運(yùn)動后三軸的數(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 + "================");
            		//如果不是測試的話,請刪掉上面這行l(wèi)og,因?yàn)樗鼤煌5臋z測......
            		// 如果速率大于閥值,那么執(zhí)行接口方法.
            		if (speed >= SPEED_SHRESHOLD) {
            			onShakeListener.OnShake();
            		}
            	}
            這是我網(wǎng)上看來的,沒啥好說的,就是注釋什么我自己寫的,可能有不對的地方..


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

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

            1,歌詞;

            2,Service;

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

            差不多吧,這些對于我來說夠忙活一段時間的了.嘿嘿.

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

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

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

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

            廣告

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

            網(wǎng)站托管運(yùn)營

              <del id="d4fwx"><form id="d4fwx"></form></del>
              <del id="d4fwx"><form id="d4fwx"></form></del><del id="d4fwx"><form id="d4fwx"></form></del>

                    <code id="d4fwx"><abbr id="d4fwx"></abbr></code>
                  • 日韩无码一区二 | 午夜福利av电影 午夜福利电影AV 午夜精品福利在线 | 自拍偷拍视频网站 | 亚洲成人免费在线观看 | 福利一区二区导航在线 |