婧婧音乐开发笔记01篇-项目组织结构和布局文件
学习Android已经一段时间了打算做一款播放器来练练手。下面的效果图是开发婧婧音乐第一阶段的效果图:
一:1.0阶段可以满足基本的功能:
1.自动获取SD卡的音乐文件,并以ListView的形式进行了显示
2.单击ListView的Item能够播放音乐
3.可以实现后台音乐播放
4.暂停,播放,上一曲,下一曲的播放
二. 在项目中用到了以下知识点:
1.ListView的优化,BaseAdapter的优化
2.UI的布局与设计
3.SD卡的音乐读取
4.Cursor的遍历,注意Cursor默认是下标-1开始的
5.contentProvider的使用
6.Service的使用
7.Service与Activity的通信
8.项目组织结构的使用:建立项目时一开始就建立了若干个项目可能需要的包把框架搭建好。
三.项目的组织结构:
以上分别对应的是:活动包,适配器包,实体包,服务包,和工具包
因为需要后台播放所以创建一个MusicPlayerService的类来提供相关的播放方法,并在主活动中调用。
DataHelper封装了变量SD卡音乐的静态方法。
四.项目的布局结构
activity_welcome:是一张欢迎界面的布局,点击应用就像微信一样先有一张引导界面
bottom代表:主布局下面的布局,这样做可以提高布局 的复用率。
top与bottom相同
item代表ListView的布局
musicplayer_activity:播放界面主布局。
五.代码
先把布局的代码放上来,因为一般设计先从视图开始的。
1.res/layout/ welcome_activity:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:paddingBottom="@dimen/activity_vertical_margin"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"tools:context="com.LZT.mp3player.WelcomeActivity"android:background="@drawable/guide" ><TextViewandroid:layout_centerInParent="true"android:layout_width="wrap_content"android:layout_height="wrap_content"android:textColor="#f8f"android:textSize="20dp"android:text="@string/welcome_to_music" /></RelativeLayout>
2.res/layout/musicplayer_activity的布局:包含一个头布局一个尾布局和一个listview
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical" ><include layout="@layout/top_layout"/><ListViewandroid:id="@+id/mp3_lv"android:padding="5dp"android:dividerHeight="2dp"android:layout_weight="1"android:layout_width="match_parent"android:layout_height="0dp"></ListView><include layout="@layout/bottom_layout"/> </LinearLayout>
3.top_layout和bottom_layout:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="50dp"android:background="#20b2aa"android:orientation="vertical" > <RelativeLayoutandroid:layout_width="wrap_content"android:layout_height="wrap_content"> <ImageButtonandroid:id="@+id/play_mode"android:layout_marginLeft="5dp"android:layout_alignParentLeft="true"android:layout_width="wrap_content"android:layout_height="wrap_content"android:background="@drawable/mode_a"/> <TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="本地音乐"android:textSize="20dp"android:layout_centerInParent="true"android:textColor="#fff"android:id="@+id/title_top"/> <ImageButtonandroid:id="@+id/love_bt"android:layout_alignParentRight="true"android:layout_width="wrap_content"android:layout_height="wrap_content"android:background="@drawable/love"/> </RelativeLayout> </LinearLayout>
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="40dp"android:background="#20b2aa"android:orientation="horizontal" ><ImageButtonandroid:id="@+id/music_logo"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:layout_marginTop="5dp"android:background="#20b2aa"android:src="@drawable/music" /><ImageButtonandroid:id="@+id/pre_bt"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:background="@drawable/pre_button_pressed" /><ImageButtonandroid:id="@+id/play_pause_bt"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:background="@drawable/play_button_pressed"/><ImageButtonandroid:id="@+id/next_bt"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:background="@drawable/next_button_pressed" /></LinearLayout>
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical" ><LinearLayoutandroid:layout_width="match_parent"android:layout_height="40dp"android:orientation="horizontal"><ImageViewandroid:id="@+id/album_img"android:layout_width="80dp"android:layout_height="wrap_content"android:src="@drawable/default_album"/><LinearLayoutandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:orientation="vertical"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="我是歌手"android:id="@+id/title_tv"/><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="你是傻逼"android:id="@+id/artist_tv"/></LinearLayout><RelativeLayoutandroid:layout_width="wrap_content"android:layout_height="wrap_content"><TextViewandroid:id="@+id/duration"android:layout_marginRight="10dp"android:layout_marginTop="20dp"android:layout_alignParentRight="true"android:text="4:00"android:layout_width="wrap_content"android:layout_height="wrap_content"/></RelativeLayout></LinearLayout></LinearLayout>
以上是项目的组织工程和布局文件,下篇文章开始介绍业务逻辑。
转载于:https://www.cnblogs.com/taotaomajia/p/4617721.html
婧婧音乐开发笔记01篇-项目组织结构和布局文件相关推荐
- Android开发笔记(七十四)布局文件优化
include/merge 布局优化中常常用到include/merge标签,include的含义类似C代码中的include,意思是直接把指定布局片段包含进当前的布局文件.include适用于多个布 ...
- 微信公众号Java开发-笔记01【微信公众号介绍、开发环境搭建】
学习网址:哔哩哔哩网站 微信公众号开发-Java版 微信公众号Java开发-笔记01[微信公众号介绍.开发环境搭建] 微信公众号Java开发-笔记02[] 微信公众号Java开发-笔记03[] 微信公 ...
- Google Map 开发笔记——基础篇(Javascript )
Google Map 开发笔记--基础篇 说明: 一.使用入门: 1.在您需要显示地图的 html 页面嵌入这段 script 2.地图 DOM 元素 3.初始化地图 二.地图画点.线.面 1.标记( ...
- 【 持续更新 】Android开发笔记汇总篇,爬各种坑,敲高效代码,各种奇难杂症,有您要治的病 。
[持续更新]Android开发笔记汇总篇,爬各种坑,敲高效代码,各种奇难杂症,有您要治的病 . 一.AndroidStudio 开发工具的那些事 . 问题 1: AndroidStudio2.2以上在 ...
- AIR移动(Starling)开发笔记基础篇
AIR移动(Starling)开发笔记基础篇 ---------kiddyPs:文档写的不是很好,欢迎指正和扩展 Starling相关 自定义移动动画 A.自定义函数 var tw:Tween = n ...
- 微信小程序开发笔记 进阶篇④——getPhoneNumber 获取用户手机号码(小程序云)
文章目录 一.前言 二.前端代码wxml 三.前端代码js 四.云函数 五.程序流程 一.前言 微信小程序开发笔记--导读 大部分微信小程序开发者都会有这样的需求:获取小程序用户的手机号码. 但是,因 ...
- 微信小程序开发笔记 进阶篇⑤——getPhoneNumber 获取用户手机号码(基础库 2.21.2 之前)
文章目录 一.前言 二.前端代码wxml 三.前端代码js 四.后端java 五.程序流程 六.参考 一.前言 微信小程序开发笔记--导读 大部分微信小程序开发者都会有这样的需求:获取小程序用户的手机 ...
- (硅谷课堂项目)Java开发笔记2:项目概述,搭建项目环境和开发讲师管理接口
文章目录 (硅谷课堂项目)Java开发笔记2:项目概述,搭建项目环境和开发讲师管理接口 1.项目概述 1.1 项目介绍 1.2 硅谷课程流程图 1.3 硅谷课堂功能架构 1.4 硅谷课堂技术架构 1. ...
- 微信小程序开发笔记 进阶篇⑥——getPhoneNumber 获取用户手机号码(基础库 2.21.2 之后)
文章目录 一.前言 二.前端代码wxml 三.前端代码js 四.后端java 五.程序流程 六.参考 一.前言 微信小程序开发笔记--导读 大部分微信小程序开发者都会有这样的需求:获取小程序用户的手机 ...
最新文章
- 【python3】爬取鼠绘汉化的海贼王漫画
- 大数据在互联网金融行业中的应用
- 记一次PowerShell免杀实战
- No, Machine Learning is not just glorified Statistics
- LeetCode 70 爬楼梯
- C#LeetCode刷题之#4-两个排序数组的中位数(Median of Two Sorted Arrays)
- RF脚本中的坑2: pip下载python库时报certificate verify failed
- Python 中xrange和range区别
- Linux常用命令(持续更新)
- arcgis构建金字塔失败什么原因_天猫入驻为什么失败?知舟集团给出失败原因和解决办法...
- 地铁译:Spark for python developers --- 搭建Spark虚拟环境 4...
- Lua里面new一个对象详细步骤
- 【spider06】Selenium
- eureka-client无法启动com.netflix.discovery.DiscoveryClient : Shutting down DiscoveryClient
- 网络编程 多道技术与同步/异步和阻塞/非阻塞
- 如何做好运营?运营类产品经理必须知道的几个常用功能设计方案
- STM32CubeMX和STM32CubeIDE组合,定义STM32开发新方式
- shell命令之tar压缩与解压
- 大数模板——来自jxy师兄
- web单页面应用与多页面应用区别
热门文章
- HttpWebRequest自动登录网站并获取网站内容(不包含验证码的网站)
- 武汉大学 RSIDEA 团队开源LoveDA:可同时推进语义分割和迁移学习
- “3D几何与视觉技术”全球在线研讨会第五期~隐式3D形状表示学习
- Zbrush风格化角色大神!带你感受别致性感美学!
- 639 页《深度学习:Deep Learning》硬核课程 PPT 下载
- CVPR 2020 顶会 AI学术检索工具
- 北大师兄告诉你,怎样顺利完成自己的博士生涯
- 神经网络初始化trick:大神何凯明教你如何训练网络!
- php新窗口打开链接,wordpress如何设置在新窗口打开链接
- mysql sql 备份数据_mysql怎么进行数据库备份和还原,以及自动备份