본문 바로가기

프로그램/Android

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

반응형
안녕하세요.  
 

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

 시간이 나는김에 안드로이드폰 기본으로 있는 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파일 리스트를 읽어오지 못해서 제가 샘플로 올려놓은 

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

도록 하겠습니다.




반응형