Como fazer um tocador de música para android 4
Nesse tutorial vou dar continuidade em Como fazer um tocador de música para android 4, portanto é a quarta parte de como criar um tocador de música para android.
Nessa quarta parte de nosso tutorial vamos assim modificar o nosso recyclerview para receber as informações quando formos adicionar as músicas.
Então vamos criar dois arquivos de background para colocarmos um quando a música estiver tocando e outro para as musicas em espera.
Se você ainda não viu como criar um background então veja o tutorial Como criar um Background no Android Studio.
Para isso vamos criar os arquivos com os seguintes nomes e seus respectivos códigos.
background_item_list
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:bottom="1dp">
<shape android:shape="rectangle" >
<solid android:color="#FFFFFF" />
<stroke android:color="#000" android:width="1dp"/>
</shape>
</item>
</layer-list>
background_item_list_active
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape>
<solid android:color="@color/colorAccent"/>
</shape>
</item>
</selector>
Vamos também criar nosso ícone de delete da música para o nosso recyclerview.
Se você não sabe como criar o ícone então veja o tutorial Como adicionar um Ícone para ImageButton.
Então vamos usar o nome de ic_delete_black para o nosso ícone, você pode escolher o ícone de sua preferência.
Logo depois de ter criado os dois backgrounds e o ícone de delete então vamos agora arrumar o nosso arquivo de layout do recyclerview e seu respectivo adapter.
Vamos modificar nosso arquivo de layout content_musicas para que fique assim como o seguinte.
content_musicas
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal" android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/background_item_list"
android:id="@+id/layAdp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_weight="1">
<TextView
android:id="@+id/tvAdpAuthor"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="#000000"
android:text="Author"
android:gravity="center"/>
<TextView
android:id="@+id/tvAdpTitle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="#000000"
android:text="Title"
android:gravity="center"/>
<TextView
android:id="@+id/tvAdpTime"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="#000000"
android:text="00:00"
android:gravity="center"/>
</LinearLayout>
<ImageButton
android:id="@+id/btnAdpDel"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:src="@drawable/ic_delete_black"
android:layout_gravity="center"
android:paddingStart="5dp"
android:paddingEnd="5dp"
android:layout_weight="9"/>
</LinearLayout>
Logo após ter feito as modificações no nosso arquivo de layout vamos deixar certo nosso arquivo do adapter deixando assim como o seguinte.
MusicAdapter
private var ctx: Context,
private val callback: (Uri,Int) -> Unit,
private val callbackMusic: () -> Int,
private val callbackDelete: (Int) -> Unit): RecyclerView.Adapter<MusicAdapter.ViewHolder>(){
private var musicList: ArrayList<Uri> = ArrayList<Uri>()
init {
this.musicList = musicList
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val view = LayoutInflater.from(ctx).inflate(R.layout.content_musicas, parent, false)
return ViewHolder(view)
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
val music = musicList[position]
var mmr = MediaMetadataRetriever()
mmr.setDataSource(ctx,music)
holder.title.text = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_TITLE)
holder.author.text = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ARTIST)
holder.lay.setOnClickListener {
callback(music,position)
}
var mediaPlayer = MediaPlayer.create(ctx,music)
val sdf = SimpleDateFormat("mm:ss")
holder.time.text = sdf.format(mediaPlayer!!.duration).toString()
mediaPlayer.release()
if(position == callbackMusic()){
holder.lay.setBackgroundResource(R.drawable.background_item_list_active)
holder.author.setTextColor(Color.WHITE)
holder.title.setTextColor(Color.YELLOW)
holder.time.setTextColor(Color.WHITE)
} else{
holder.lay.setBackgroundResource(R.drawable.background_item_list)
holder.author.setTextColor(Color.BLACK)
holder.title.setTextColor(Color.parseColor("#008577"))
holder.time.setTextColor(Color.BLACK)
}
holder.del.setOnClickListener {
callbackDelete(position)
}
}
override fun getItemCount(): Int {
return musicList.size
}
inner class ViewHolder(view: View): RecyclerView.ViewHolder(view){
var lay = view.layAdp
var author = view.tvAdpAuthor
var title = view.tvAdpTitle
var time = view.tvAdpTime
var del = view.btnAdpDel
}
}
Assim termino essa quarta parte de Como fazer um tocador de música para android.
Foi criado um gist do nosso projeto para facilitar nossa continuidade do projeto, então se sovê quiser clonar nosso projeto você pode utilizar a seguinte lina para isso.
Assim você vai precisar digitar o seguinte comando quando for atualizar seu repositório.
E assim seu repositório será atualizado.
Enfim espero poder ter ajudado com mais esta parte do tutorial de Como fazer um tocador de música para android 4.
Rodrigo Leutz
Desenvolvedor Web e Android ( Kotlin e Java )