Viewpager + TabLayout + Fragment + MediaPlayer的使用

效果图

activity_main

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
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:orientation="vertical"
tools:context=".MainActivity">

<android.support.design.widget.TabLayout
android:id="@+id/tablayout"
style="@style/CategoryTab"
android:background="@color/primary_color"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>


<android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="match_parent"/>

</LinearLayout>



fragment
<?xml version="1.0" encoding="utf-8"?>

<android.support.v7.widget.RecyclerView
android:id="@+id/recycerview"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:drawSelectorOnTop="true">
</
android.support.v7.widget.RecyclerView>



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


<LinearLayout
android:id="@+id/layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center">

<ImageView
android:id="@+id/image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
tools:src="@drawable/color_black" />

<TextView
tools:text="one"
android:id="@+id/text_english"
android:layout_margin="10dp"
android:textAppearance="?android:textAppearanceMedium"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"/>

<TextView
tools:text="lutti"
android:id="@+id/text_miwok"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:textAppearance="?android:textAppearanceMedium" />

<ImageView
android:id="@+id/audio"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:src="@drawable/ic_baseline_play_arrow_24px" />
</LinearLayout>


<View
android:layout_below="@id/layout"
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="#c1c1c1" />
</LinearLayout>



Word
package com.example.admin.miwok;

public class Word {
private String word_english;
private String word_miwok;
private int imageId;
private int audioId;

public Word(String word_english ,String word_miwok ,int imageId ,int audioId){
this.word_english=word_english;
this.word_miwok=word_miwok;
this.imageId=imageId;
this.audioId=audioId;
}

public String getWord_english(){
return word_english;
}

public String getWord_miwok(){
return word_miwok;
}

public int getImageId() {
return imageId;
}

public int getAudioId() {
return audioId;
}
}




MainActivity
package com.example.admin.miwok;

import android.support.design.widget.TabLayout;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ViewPager viewPager = findViewById(R.id.viewpager);
viewPager.setAdapter(new CategoryFragmentPagerAdapter(this,getSupportFragmentManager()));
TabLayout tabLayout = findViewById(R.id.tablayout);
tabLayout.setupWithViewPager(viewPager);
}
}



mAdapter
package com.example.admin.miwok;

import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import java.util.List;

public class mAdpater extends RecyclerView.Adapter<mAdpater.viewHolder> {
private Context context;
private List<Word> itemlist;
public onAudioItemClickListener onAudioItemClick;


public mAdpater(Context context,List<Word> itemlist,onAudioItemClickListener onAudioItemClick){
this.context=context;
this.itemlist=itemlist;
this.onAudioItemClick=onAudioItemClick;
}


@NonNull
@Override
public viewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View view=LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item,viewGroup,false);
viewHolder holder=new viewHolder(view);
return holder;
}

@Override
public void onBindViewHolder(@NonNull viewHolder viewHolder, int i) {
String word_miwok=itemlist.get(i).getWord_miwok();
String word_englist=itemlist.get(i).getWord_english();
int imageId=itemlist.get(i).getImageId();

viewHolder.textView_miwok.setText(word_miwok);
viewHolder.textView_english.setText(word_englist);
viewHolder.imageView.setImageResource(imageId);

}

@Override
public int getItemCount() {
return itemlist.size();
}

public class viewHolder extends RecyclerView.ViewHolder{
final TextView textView_miwok;
final TextView textView_english;
final ImageView imageView;
final ImageView audioView;

public viewHolder(@NonNull View itemView) {
super(itemView);
textView_miwok=itemView.findViewById(R.id.text_miwok);
textView_english=itemView.findViewById(R.id.text_english);
imageView=itemView.findViewById(R.id.image);
audioView=itemView.findViewById(R.id.audio);
audioView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onAudioItemClick.onClick(getAdapterPosition());
}
});


}
}

public interface onAudioItemClickListener{
void onClick(int position);
}
}



NumbersFragment
package com.example.admin.miwok;

import android.content.Context;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import java.util.ArrayList;
import java.util.List;

public class NumbersFragment extends Fragment implements mAdpater.onAudioItemClickListener {

private List<Word> itemlist;
private AudioManager manager;
private MediaPlayer player;

private MediaPlayer.OnCompletionListener listener=new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
releaseMediaPlaer();
}
};

private AudioManager.OnAudioFocusChangeListener onAudioFocusChangeListener=new AudioManager.OnAudioFocusChangeListener() {
@Override
public void onAudioFocusChange(int focusChange) {
if (focusChange==AudioManager.AUDIOFOCUS_GAIN){
player.start();
}else if (focusChange==AudioManager.AUDIOFOCUS_LOSS_TRANSIENT||focusChange==AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK){
player.pause();
player.seekTo(0);
}else if (focusChange==AudioManager.AUDIOFOCUS_LOSS){
releaseMediaPlaer();
}
}
};

@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view=inflater.inflate(R.layout.fragment,container,false);
manager=(AudioManager) getActivity().getSystemService(Context.AUDIO_SERVICE);
itemlist=new ArrayList<Word>();
itemlist.add(new Word("one", "lutti",R.drawable.number_one, R.raw.number_one));
itemlist.add(new Word("two", "otiiko", R.drawable.number_two, R.raw.number_two));
itemlist.add(new Word("three", "tolookosu", R.drawable.number_three, R.raw.number_three));
itemlist.add(new Word("four", "oyyisa", R.drawable.number_four, R.raw.number_four));
itemlist.add(new Word("five","massokka", R.drawable.number_five, R.raw.number_five));
itemlist.add(new Word("six", "temmokka", R.drawable.number_six, R.raw.number_six));
itemlist.add(new Word("seven", "kenekaku", R.drawable.number_seven, R.raw.number_seven));
itemlist.add(new Word("eight", "kawinta", R.drawable.number_eight,R.raw.number_eight));
itemlist.add(new Word("nine", "wo'e", R.drawable.number_nine, R.raw.number_nine));
itemlist.add(new Word("ten", "na'aacha", R.drawable.number_ten, R.raw.number_ten));
RecyclerView recyclerView=view.findViewById(R.id.recycerview);
LinearLayoutManager linearLayoutManager=new LinearLayoutManager(getActivity());
recyclerView.setLayoutManager(linearLayoutManager);
mAdpater adpater=new mAdpater(getActivity(),itemlist,this);
recyclerView.setAdapter(adpater);
return view;

}


@Override
public void onClick(int position) {
releaseMediaPlaer();
int result=manager.requestAudioFocus(onAudioFocusChangeListener,AudioManager.STREAM_MUSIC,AudioManager.AUDIOFOCUS_GAIN_TRANSIENT);
if (result==AudioManager.AUDIOFOCUS_GAIN) {

player = MediaPlayer.create(getActivity(), itemlist.get(position).getAudioId());
player.start();
player.setOnCompletionListener(listener);
}

}

@Override
public void onStop() {
super.onStop();
releaseMediaPlaer();
}

private void releaseMediaPlaer() {
if (player != null) {
player.release();
player = null;
manager.abandonAudioFocus(onAudioFocusChangeListener);
}
}


}
同理,其他几个fragment复制粘贴一下就行。


CategoryFragmentPagerAdapter

package com.example.admin.miwok;

import android.content.Context;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;

public class CategoryFragmentPagerAdapter extends FragmentPagerAdapter {
private Context context;
private String tabTitles[] = new String[] { "Numbers", "Family", "Colors", "Phrases" };



public CategoryFragmentPagerAdapter(Context context ,FragmentManager manager){
super(manager);
this.context=context;
}

@Override
public Fragment getItem(int position) {
if (position==0){
return new NumbersFragment();
}else if (position==1){
return new FamilyFragment();
}else if (position==2){
return new ColorsFragment();
}else {
return new PhrasesFragment();
}
}

@Override
public int getCount() {
return 4;
}

@Nullable
@Override
public CharSequence getPageTitle(int position) {
return tabTitles[position];
}
}

github项目源码: https://github.com/NeoWu55/Android-Miwok

猜你喜欢

转载自www.cnblogs.com/neowu/p/10657356.html