效果图

在gradle里导包  implementation 'com.android.support:design:28.0.0'

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" />

     <LinearLayout         android:layout_width="0dp"         android:layout_height="wrap_content"         android:layout_weight="2"         android:gravity="center"         android:orientation="vertical">

    <TextView        tools:text="one"        android:id="@+id/text_english"        android:textSize="16sp"        android:layout_margin="10dp"        android:textColor="#2B3D4D"        android:layout_width="wrap_content"        android:layout_height="wrap_content" />

    <TextView        tools:text="lutti"        android:id="@+id/text_miwok"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_margin="10dp"        android:textSize="16sp"        android:textColor="#2B3D4D"/>

     </LinearLayout>

        <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="#dfdfdf" /></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 String getWord_english(){        return  word_english;    }

    public String getWord_miwok(){        return  word_miwok;    }

    public int getImageId() {        return imageId;    }

    public int getAudioId() { return audioId; }

    public static class Builder{        private String word_english;        private String word_miwok;        private int  imageId;        private int audioId;

        public Builder imageId(int imageId){            this.imageId=imageId;            return  this; }

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

        public Word builder(){            return new Word(this);        }    }

    private Word(Builder builder){        this.word_english=builder.word_english;        this.word_miwok=builder.word_miwok;        this.imageId=builder.imageId;        this.audioId=builder.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;    private 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<>();

        itemlist.add(new Word.Builder("one", "lutti", R.raw.number_one)                .imageId(R.drawable.number_one).builder());        itemlist.add(new Word.Builder("two", "otiiko", R.raw.number_two)               .imageId(R.drawable.number_two).builder());        itemlist.add(new Word.Builder("three", "tolookosu", R.raw.number_three)               .imageId(R.drawable.number_three).builder());        itemlist.add(new Word.Builder("four", "oyyisa",  R.raw.number_four)                .imageId( R.drawable.number_four).builder());        itemlist.add(new Word.Builder("five","massokka", R.raw.number_five)                .imageId( R.drawable.number_five).builder());        itemlist.add(new Word.Builder("six", "temmokka", R.raw.number_six)                 .imageId(R.drawable.number_six).builder());        itemlist.add(new Word.Builder("seven", "kenekaku", R.raw.number_seven)              .imageId( R.drawable.number_seven).builder());        itemlist.add(new Word.Builder("eight", "kawinta", R.raw.number_eight)                .imageId(R.drawable.number_eight).builder());        itemlist.add(new Word.Builder("nine", "wo'e", R.raw.number_nine)                 .imageId(R.drawable.number_nine).builder());        itemlist.add(new Word.Builder("ten", "na'aacha", R.raw.number_ten)                .imageId( R.drawable.number_ten).builder());        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 static final  int size=4;    private static final int nuumber_fragment=0,family_fragment=1,colors_fragment=2,phrases_fragment=3;

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

    @Override    public Fragment getItem(int position) {        switch (position){            default:return new NumbersFragment();            case nuumber_fragment:                return new NumbersFragment();            case family_fragment:                return  new FamilyFragment();            case colors_fragment:                return new ColorsFragment();            case phrases_fragment:                return new PhrasesFragment();        }    }

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

    @Nullable    @Override    public CharSequence getPageTitle(int position) {        final String[] pageTitle=context.getResources().getStringArray(R.array.pageTitle);        return pageTitle[position];    }

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

ViewPager + TabLayout + Fragment + MediaPlayer的使用的更多相关文章

  1. 【 Android 】ViewPager + TabLayout + Fragment 数据初始化问题

    在 ViewPager 和 Fragment 配合使用的时候,ViewPager 会使用预加载机制,使得我们在没有切换到到对应页面时,就已经加载好了,这是个非常不好的用户体验. 所以本示例项目就诞生了 ...

  2. TabLayout+Fragment+ViewPager+FragmentStatePagerAdapter实现Tab标签

    首先来看下实现的效果吧: 最近在项目中实现这个效果的时候.尽管自己磕磕绊绊的实现了,可是知识确实模模糊糊的,今天天气异常的冷,在加上这个知识不太熟练,实在是没有心情进行接下来的计划,干脆借着这个时间, ...

  3. 巧力避免ViewPager的预加载数据,Tablayout+Fragment+viewPager

    问题描述 最近在进行一个项目的开发,其中使用到了Tablayout+Fragment+viewPager来搭建一个基本的框架,从而出现了设置数据适配器的时候,item的位置错乱问题.我打印log日志的 ...

  4. 使用ViewPager切换Fragment时,防止频繁调用OnCreatView

    使用ViewPager切换Fragment,我原先使用系统自带的适配器FragmentPagerAdapter. 切换fragment时,频繁调用oncreatview(). 查看FragmentPa ...

  5. ViewPager之Fragment页面切换

    一.概述 ViewPager是android-support-v4中提供的类,它是一个容器类,常用于页面之间的切换. 继上篇文章<ViewPager之引导页>之后,本文主要介绍ViewPa ...

  6. ViewPager和Fragment的结合使用fragment里包含着listview的常见问题

    在我们开发的过程中可能会遇到类似需求,我们需要做一个左右滑动的tab导航,这个时候有些朋友可能会想到viewpager和fragment的结合来实现这个功能:当然实现的方法不单单着一种.我们这个随笔讨 ...

  7. viewpager和fragment预加载的解决

    在使用Viewpager和fragment处理中会出现预加载的问题,最近看别人的代码,终于找到了一个很好的处理方法 能有效的解决预加载的问题,在fragment都继承一个重写setUserVisibl ...

  8. 防止ViewPager和Fragment结合使用时候的数据预加载

    不知道你们使用ViewPager和Fragment结合的时候发现一个问题没,如果你的每个Fragment都需要请求网络数据,并且你在请求网络数据的时候会加入进度对话框的加载显示效果,当你显示第一个Fr ...

  9. Android开发之ViewPager+ActionBar+Fragment实现响应式可滑动Tab

     今天我们要实现的这个效果呢,在Android的应用中十分地常见,我们可以看到下面两张图,无论是系统内置的联系人应用,还是AnyView的阅读器应用,我们总能找到这样的影子,当我们滑动屏幕时,Tab可 ...

随机推荐

  1. Java开发笔记(七十二)Java8新增的流式处理

    通过前面几篇文章的学习,大家应能掌握几种容器类型的常见用法,对于简单的增删改和遍历操作,各容器实例都提供了相应的处理方法,对于实际开发中频繁使用的清单List,还能利用Arrays工具的asList方 ...

  2. set用法小结

    set本质上是一棵红黑树,用法也就那么几个,插入删除lowerbound,再就是迭代器之类的 基本用法 begin()--返回指向第一个元素的迭代器 #include<cstdio> #i ...

  3. 你真的了解PeopleSoft中的function和method方法嘛

    谈下function和method在内嵌与外部传参的区别 1.内嵌函数(Internal Functions) 看下现在输出&x的话会返回什么值? 2.内嵌函数(Internal Functi ...

  4. Messenger在MVVM模式中的应用

    Messenger在MVVM模式中的应用 Messenger在MVVM中应用的前提 我们知道在MVVM架构中,系统平台的Silverlight客户端界面开发和业务逻辑已经被分开,XAML是SL的主要部 ...

  5. 共创力咨询推出《静态代码分析(PCLint)高级实务培训》课程!

    [课程背景] C/C++语言的语法非常灵活性,尤其是指针及内存使用,这种灵活性使代码效率比较高,但同时也使得代码编写具有较大的随意性,另外C/C++编译器不进行强制类型检查,也不对数据边界和有效性进行 ...

  6. 浅谈SPA

    最近一直在学习关于Vue的一些知识,由于遇到了问题,去网上查找资料,收获颇丰,在此分享. 1. 什么是SPA? 单页Web应用(single page web application, SPA),就是 ...

  7. PJSUA2开发文档--第五章 帐户(号)Accounts

    第五章 帐户(号) 帐户提供正在使用该应用程序的用户的身份(或身份).一个帐户有一个与之相关的SIP统一资源标识符(URI).在SIP术语中,该URI用作该人的记录地址( Address of Rec ...

  8. Hive的命名空间

    Hive的命名空间分为:hiveconf , system, env 和 hivevar 1.hiveconf 的命名空间指的是hive-site.xml下面配置的环境变量 2.system的命名空间 ...

  9. Python爬虫之正则表达式(1)

    廖雪峰正则表达式学习笔记 1:用\d可以匹配一个数字:用\w可以匹配一个字母或数字: '00\d' 可以匹配‘007’,但是无法匹配‘00A’; ‘\d\d\d’可以匹配‘010’: ‘\w\w\d’ ...

  10. Docker: 企业级镜像仓库Harbor部署(http)

    Harbor离线安装包下载地址:https://github.com/goharbor/harbor Docker compose(安装harbor需要用到docker compose)下载地址:ht ...