프로그램/Android

안드로이드 mp3플레어어 만들기(1. 커스텀 Listview 생성)

잡식성초보 2017. 8. 4. 14:30
안녕하세요.  
 

요즘 시간이 조금 나는 관계로 조금은 글을 적극적으로 써볼까 합니다... 

 시간이 나는김에 안드로이드폰 기본으로 있는 mp3플레이어를 모방하여 만들어 내볼까 합니다.

 Mp3 플레이어를 만들며 구현할것들은 대충 아래와 같습니다^^; 

 1. 자신이 원하는 형태로 만들어 보여줄수 있는 커스텀 Listview 


2. Cursor를 이용하여 mp3파일 metadata를 가져와야 합니다. 


3. mp3파일을 실행시킬 service 구동 


4. notification을 이용하여 플레이어 종료 또는 곡 변경 그럼 지금부터 만들어 보도록 합시다. 




 1. 먼저 Layout을 그리고 아래와 같이 만들어 줍니다.



<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="60dp">

        <TextView
            android:id="@+id/txt_title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:text="뮤직 페스티발"
            android:textSize="20sp"
            android:textStyle="bold"/>

        <FrameLayout
            android:layout_width="match_parent"
            android:layout_height="0.7dp"
            android:layout_alignParentBottom="true"
            android:background="#202735"/>
    </RelativeLayout>

    <ListView
        android:id="@+id/menuList"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</LinearLayout>



2. Activiy를 생성하여 layout을 연결합니다.


 
public class MusicServiceActivity extends Activity implements AdapterView.OnItemClickListener{
 
    private String TAG = "MusicServiceActivity";
    private Context mContext;
    private ListView musicListView;
    private MusicAdapter adapter;
 
    ArrayList<MusicData> list = new ArrayList<>();
 
    @Override
    protected void onDestroy() {
        super.onDestroy();
    }
 
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_music);
        mContext = MusicServiceActivity.this;
 
        init();
    }
 
    private void init(){
 
        adapter = new MusicAdapter(mContext, android.R.layout.simple_list_item_1, list);
        adapter.setMusicBtnListener(new MusicAdapter.btnClickListener() {
            @Override
            public void MusicBtnClick(int position) {
                ListenMusic(position);
            }
        });
        musicListView = findViewById(R.id.menuList);
        musicListView.setAdapter(adapter);
        musicListView.setOnItemClickListener(this);
    }
  
    @Override
    public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {
 
    }
}


3. 위에서 빨간줄 뜨는 adpater는 아래와 같은데요. 현재는 musicdata가 없으므로 수동으로 하여서 

커스텀 listview를 띄어보시길 바랍니다.


 
public class MusicAdapter extends ArrayAdapter<MusicData>{
 
    private ArrayList<MusicData> item;
    private Context mContext;
 
    public MusicAdapter( Context context, int resource,  ArrayList<MusicData> item) {
        super(context, resource, item);
        this.mContext = context;
        this.item = item;
 
    }
 
    public void setAdapterList(ArrayList<MusicData> list){
 
        item = list;
        notifyDataSetChanged();
    }
 
    @NonNull
    @Override
    public View getView(final int position, @Nullable View convertView, @NonNull ViewGroup parent) {
 
        ViewHolder holder;
        View v = convertView;
        if(v == null){
            LayoutInflater vi = (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            v = vi.inflate(R.layout.row_music_list, null);
 
            holder = new ViewHolder();
            holder.img = v.findViewById(R.id.imgMusic);
            holder.title = v.findViewById(R.id.txt_music_title);
            holder.name = v.findViewById(R.id.txt_singer_name);
            holder.btn =v.findViewById(R.id.isMusic_click);
 
            v.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }
 
        final MusicData data = item.get(position);
        if(data != null){
 
            holder.img.setBackgroundResource(R.drawable.musical_note);
            holder.title.setText("곡명");
            holder.name.setText("가수명");
            holder.btn.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                     
                }
            });
        }
 
        return v;
    }
 
    class ViewHolder {
 
        ImageView img;
        TextView title;
        TextView name;
        Button btn;
    }
}



4. 저의 xml은 아래와 같습니다. 커스텀한 레이아웃은 편하신대로 만드시면 될거같습니다.


 
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
 
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
 
        <ImageView
            android:id="@+id/imgMusic"
            android:layout_width="70dp"
            android:layout_height="70dp"
            android:layout_marginTop="5dp"
            android:layout_marginBottom="4dp"
            android:layout_centerVertical="true"/>
 
        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:layout_centerVertical="true"
            android:layout_marginLeft="10dp"
            android:layout_toRightOf="@id/imgMusic">
 
            <TextView
                android:id="@+id/txt_music_title"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textSize="17sp"
                android:text="test"
                android:textStyle="bold" />
 
            <TextView
                android:id="@+id/txt_singer_name"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="7dp"
                android:textSize="13sp"
                android:text="test"
                android:textStyle="bold" />
 
        </LinearLayout>
 
        <Button
            android:id="@+id/isMusic_click"
            android:layout_width="60dp"
            android:layout_height="35dp"
            android:layout_centerVertical="true"
            android:layout_alignParentRight="true"
            android:layout_marginRight="15dp"/>
 
    </RelativeLayout>
 
    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="0.7dp"
        android:background="#202735"/>
 
</LinearLayout>
 





 아직은 위의 소스코드를 붙여 넣는다면 mp3파일 리스트를 읽어오지 못해서 제가 샘플로 올려놓은 

이미지 처럼 나오지 않을겁니다. 다음 강의에서는 위의 이미지처럼 나오도록 휴대폰 데이터를 읽어보

도록 하겠습니다.




반응형