西南科技大学本科生毕业论文
// 自定加载更多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
图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