[毕业论文]Android在线音乐播放器设计与实现 下载本文

西南科技大学本科生毕业论文

// 自定加载更多ListView @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { // 是否是向下滚动 boolean isPullDown = firstVisibleItem > mFirstVisibleItem; if (mEnableLoad && !mIsLoading && isPullDown) { int lastVisibleItem = firstVisibleItem + visibleItemCount; // 是否滚动到了最后一条 if (lastVisibleItem >= totalItemCount - 1) { // 加载更多 onLoad(); } } mFirstVisibleItem = firstVisibleItem; } 补充说明 在线音乐需要连接网络,播放在线歌曲时会暂停本地歌曲的播放 (3) 在线音乐界面设计

图5-2在线音乐界面设计(1) 图5-3在线音乐界面设计(2)

33

西南科技大学本科生毕业论文

5.2.3 在线搜索详细设计

启动应用,点击搜索按钮,进入搜索界面,输入歌曲相关信息,如歌手名,歌曲名等,点击搜索,可以搜索相关歌曲,搜索结果以列表形式展示,点击可以播放,点击列表右侧可以分享,下载等。

(1) 在线搜索相关类详细说明

表5-5 在线搜索相关类详细说明

类名 SearchMusicActivity 父类 BaseActivity 接口 OnQueryTextListener OnItemClickListener OnMoreClickListener SearchMusicAdapter SearchView BaseAdapter LinearLayoutCompat CollapsibleActionView 搜索结果歌曲列表适配器 搜索视图 含义 在线搜索界面 (2) 在线搜索设计与实现

表5-6 在线搜索设计与实现

功能描述 接口与属性 核心代码 根据歌曲信息,如歌手名,歌曲名等检索相关歌曲 启动应用,点击搜索按钮 // SearchView的初始化 // 获得SearchView对象 SearchView searchView = (SearchView) menu.findItem(R.id.action_search).getActionView(); searchView.onActionViewExpanded(); // 设置搜索框hint内容 searchView.setQueryHint(getString(R.string.search_tips)); // 设置监听器 searchView.setOnQueryTextListener(this); searchView.setSubmitButtonEnabled(true); ImageView // 替换搜索按钮图标 mGoButton.setImageResource(R.drawable.ic_menu_search); // 在线搜索请求 OkHttpUtils.get().url(Constants.BASE_URL) .addParams(Constants.PARAM_METHOD, Constants.METHOD_SEARCH_MUSIC) .addParams(Constants.PARAM_QUERY, keyword) mGoButton = (ImageView) searchView.findViewById(R.id.search_go_btn); 34

西南科技大学本科生毕业论文

.build() .execute(new JsonCallback(JSearchMusic.class) { @Override public void onResponse(JSearchMusic response) { // 请求成功 mSearchMusicList.addAll(response.getSong()); mAdapter.notifyDataSetChanged(); } }); } 补充说明 搜索结果可以直接播放,分享,下载等 (3) 在线搜索界面设计

图5-4 在线搜索界面设计

5.2.4 播放控制详细设计

启动应用,底部播放控制条支持播放/暂停和下一曲快捷操作,点击播放快捷控制条,进入播放控制界面,可以查看专辑封面,歌词,调节播放进度,切换播放模式,调节音量等。

35

西南科技大学本科生毕业论文

(1) 播放控制相关类详细说明

表5-7 播放控制相关类详细说明

类名 PlayFragment 父类 BaseFragment 接口 OnClickListener OnPageChangeListener OnPageChangeListener AlbumCoverView LrcView IndicatorLayout View View LinearLayout AnimatorUpdateListener 专辑封面自定义视图 歌词自定义视图 ViewPager Indicator自定义视图 含义 播放控制界面 (2) 播放控制设计与实现

表5-8 播放控制设计与实现

功能描述 接口与属性 核心代码 对当前播放的歌曲进行详细控制,显示专辑列表和歌词 启动应用,点击底部快捷播放控制条 专辑封面控件: // 设置旋转角度和圆心 mDiscMatrix.setRotate(mDiscRotation, mDiscPX, mDiscPY); mCoverMatrix.setRotate(mDiscRotation, mCoverPX, mCoverPY); mNeedleMatrix.setRotate(mNeedleRotation, mNeedlePX, mNeedlePY); // 设置旋转半径端点坐标 mDiscMatrix.preTranslate(mDiscDX, mDiscDY); mCoverMatrix.preTranslate(mCoverDX, mCoverDY); mNeedleMatrix.preTranslate(mNeedleDX, mNeedleDY); mTopLine.setBounds(0, getTop(), getWidth(), getTop() + mTopLineHeight); // 绘制 mTopLine.draw(canvas); mCoverBorder.draw(canvas); canvas.drawBitmap(mCoverBitmap, mCoverMatrix, null); canvas.drawBitmap(mDiscBitmap, mDiscMatrix, null); canvas.drawBitmap(mNeedleBitmap, mNeedleMatrix, null); 歌词控件: // 中心Y坐标 float centerY = getHeight() / 2 + mTextSize / 2 + mAnimOffset; // 画当前行 String currStr = mLrcTexts.get(mCurrentLine); float currX = (getWidth() - mCurrentPaint.measureText(currStr)) / 2; canvas.drawText(currStr, currX, centerY, mCurrentPaint); // 画当前行上面的 for (int i = mCurrentLine - 1; i >= 0; i--) { 36