对刚学习的android开发中音乐播放器的一点总结
2017-12-20 08:52
441 查看
一.创建实体类
1.首先新建一个java项目,可以任取名,但是首字母要大写。
例如:YinYueBoFangQi2.在java项目的默认模块app下的java中的第一个子文件里新建包。
在java中的第一个子文件里新建包adapter包,entity和fragment包;在res\layout中新建Layout XML File,取名music_item;新建Empty Activity文件,取Activity名Music,Layout名activity_music.
在adapter包中新建MusicListAdpter java class, 在entity包中新建Music java class .
3.在Music.java中创建实体类
public class Music { public String title; public String artist; public String album; public int length; public Bitmap aLbumBmp; }
二.创建行布局
1.在activity_main.xml中建立两个文本框
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.lenovo.zy.pailie.MainActivity"> <LinearLayout android:layout_width="match_parent" android:layout_height="50dp" android:orientation="horizontal"> <TextView android:id="@+id/main_local_tv" android:layout_width="0dp" android:layout_height="50dp" android:layout_weight="1" android:textSize="20sp" android:text="本地音乐" android:gravity="center" /> <TextView android:id="@+id/main_online_tv" android:layout_width="0dp" android:layout_height="50dp" android:layout_weight="1" android:textSize="20sp" android:text="在线音乐" android:gravity="center" /> </LinearLayout> <android.support.v4.view.ViewPager android:id="@+id/main_vp" android:layout_width="match_parent" android:layout_height="match_parent"> </android.support.v4.view.ViewPager> </LinearLayout>
2.在activity_music.xml中创建
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.lenovo.zy.pailie.Music"> <TextView android:id="@+id/music_title" android:text="成都" android:textSize="30dp" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:id="@+id/music_artist" android:text="赵雷-成都" android:textSize="30dp" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout>
这是虚拟的歌单,因为要先调试一下。
3.在music_item.xml中创建
<?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:orientation="horizontal"> <ImageView android:id="@+id/music_item_bmp" android:layout_width="50dp" android:layout_height="50dp" android:src="@mipmap/ic_launcher"/> <TextView android:id="@+id/music_item_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="成都"/> <TextView android:id="@+id/music_item_artist" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="bottom" android:text="赵雷"/> </LinearLayout>
模拟被调出的情况。由于考虑到ListView的排列,所以将两个TextView放在一个ImageView中,以方便排列。
4.在fragment下建立LocalFragment和OnlineFragment的Fragment文件
5.在MainActivity中创建
package com.lenovo.zy.pailie; import android.support.v4.app.Fragment; import android.support.v4.view.ViewPager; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.TextView; import com.lenovo.zy.pailie.adapter.MusicPagerAdapter; import com.lenovo.zy.pailie.fragment.LocalFragment; import com.lenovo.zy.pailie.fragment.OnlineFragment; import java.util.ArrayList; import java.util.List; public class MainActivity extends AppCompatActivity implements View.OnClickListener{ private TextView localTV; private TextView onlineTV; private ViewPager viewPager; private List<Fragment>fragmentList=new ArrayList<>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); bindID(); localTV.setOnClickListener(this); onlineTV.setOnClickListener(this); LocalFragment localFragment=new LocalFragment(); OnlineFragment onlineFragment=new OnlineFragment(); fragmentList.add(localFragment); fragmentList.add(onlineFragment); MusicPagerAdapter pagerAdapter=new MusicPagerAdapter(getSupportFragmentManager(),fragmentList); viewPager.setAdapter(pagerAdapter); } private void bindID() { localTV=findViewById(R.id.main_local_tv); onlineTV=findViewById(R.id.main_online_tv); viewPager=findViewById(R.id.main_vp); } @Override public void onClick(View view) { switch (view.getId()){ case R.id.main_local_tv: break; case R.id.main_online_tv: break; default: break; } } }
这里是定义几个类型,例如localTV,onlineTv,viewPager并绑定他们的ID和监听事件,以及他们的返回值。
三.创建适配器
1.adpater下建立MusicListAdapter java文件
package com.lenovo.zy.pailie.adapter; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.TextView; import com.lenovo.zy.pailie.R; import com.lenovo.zy.pailie.entity.Music; import java.util.List; /** * Created by pc on 2017/12/18. */ public class MusicListAdapter extends BaseAdapter{ private List<Music>musicList; private Context context; public MusicListAdapter(List<Music>musicList,Context context){ this.context=context; this.musicList=musicList; } @Override public int getCount() { return musicList.size(); } @Override public Object getItem(int i) { return null; } @Override public long getItemId(int i) { return 0; } @Override public View getView(int i, View convertView, ViewGroup viewGroup) { View view = null; ViewHolder viewHolder=null; if (convertView==null){ view= LayoutInflater.from(context).inflate(R.layout.music_item,null); viewHolder=new ViewHolder(); viewHolder.titleTV=view.findViewById(R.id.music_item_title); viewHolder.artistTV=view.findViewById(R.id.music_item_artist); viewHolder.albumImgview=view.findViewById(R.id.music_item_bmp); view.setTag(viewHolder); }else { view=convertView; viewHolder=(ViewHolder)view.getTag(); } Music music=musicList.get(i); viewHolder.titleTV.setText(music.title); viewHolder.artistTV.setText(music.artist+"-"+music.album); if (music.aLbumBmp!=null){ viewHolder.albumImgview.setImageBitmap(music.aLbumBmp); }else { viewHolder.albumImgview.setImageResource(R.mipmap.default_cover); } return view; } class ViewHolder{ TextView titleTV; TextView artistTV; ImageView albumImgview; } }
创建全局变量
2.创建构造方法
private void initListView() { musicList = new ArrayList<>(); ContentResolver resolver = getActivity().getContentResolver(); Cursor cursor = resolver.query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null, null, null, null); cursor.moveToFirst(); do { Music m = new Music(); m.title = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.TITLE)); m.album = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ALBUM)); m.artist = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ARTIST)); int albumID=cursor.getInt(cursor.getColumnIndex(MediaStore.Audio.Media.ALBUM_ID)); m.aLbumBmp=getAlbumArt(albumID); musicList.add(m); } while (cursor.moveToNext()); cursor.close(); MusicListAdapter adapter = new MusicListAdapter(musicList, getActivity()); localListView.setAdapter(adapter); }
定义构造方法,改造适配器
填充数据
1.可以填充虚拟数据,也可以导入手机数据
private Bitmap getAlbumArt(int album_id) { String mUriAlbums = "content://media/external/audio/albums"; String[] projection = new String[]{"album_art"}; Cursor cur = getActivity().getContentResolver().query(Uri.parse(mUriAlbums + "/" + Integer.toString(album_id)), projection, null, null, null); String album_art = null; if (cur.getCount() > 0 && cur.getColumnCount() > 0) { cur.moveToNext(); album_art = cur.getString(0); } cur.close(); Bitmap bm = null; if (album_art != null) { bm = BitmapFactory.decodeFile(album_art); } else { bm = BitmapFactory.decodeResource(getResources(), R.mipmap.default_cover); } return bm; }
相关文章推荐
- Android应用开发学习总结(二)——新建项目与目录结构了解
- 个人开发总结分享:Android学习及如何利用android来赚钱
- 关于DNN Module开发学习以来的一点总结
- Android开发学习总结(1.19-ContentProvider)
- Android、JUnit深入浅出(七)——总结篇 By: 海市蜃楼 | In: Android开发 6 十一 2009 在学习Android、JUnit的过程中,随着学习的深入,将Androi
- Android开发学习总结(1.1-1.15)
- android开发的一点小总结,小杂言,小记录
- Android学习之Bluetooth开发总结<续2>
- Android基于XMPP Smack Openfire下学习开发IM(六)总结
- Android开发学习总结(1.21-广播机制Broadcast)
- Android基于XMPP Smack Openfire下学习开发IM(六)总结
- Android开发学习笔记:Button事件实现方法的总结
- Android基于XMPP Smack Openfire下学习开发IM(六)总结
- android的初步开发学习记录总结
- Android开发学习总结(1.18-文件下载)
- Android开发学习之常见适配器总结
- 个人开发总结分享:Android学习及如何利用android来赚钱
- Android <Android应用开发实战> 学习总结杂项
- Android应用开发学习总结(一)——环境搭建与基础准备
- 关于DNN Module开发学习以来的一点总结