ViewPager + TabLayout + Fragment + MediaPlayer的使用
效果图
在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的使用的更多相关文章
- 【 Android 】ViewPager + TabLayout + Fragment 数据初始化问题
在 ViewPager 和 Fragment 配合使用的时候,ViewPager 会使用预加载机制,使得我们在没有切换到到对应页面时,就已经加载好了,这是个非常不好的用户体验. 所以本示例项目就诞生了 ...
- TabLayout+Fragment+ViewPager+FragmentStatePagerAdapter实现Tab标签
首先来看下实现的效果吧: 最近在项目中实现这个效果的时候.尽管自己磕磕绊绊的实现了,可是知识确实模模糊糊的,今天天气异常的冷,在加上这个知识不太熟练,实在是没有心情进行接下来的计划,干脆借着这个时间, ...
- 巧力避免ViewPager的预加载数据,Tablayout+Fragment+viewPager
问题描述 最近在进行一个项目的开发,其中使用到了Tablayout+Fragment+viewPager来搭建一个基本的框架,从而出现了设置数据适配器的时候,item的位置错乱问题.我打印log日志的 ...
- 使用ViewPager切换Fragment时,防止频繁调用OnCreatView
使用ViewPager切换Fragment,我原先使用系统自带的适配器FragmentPagerAdapter. 切换fragment时,频繁调用oncreatview(). 查看FragmentPa ...
- ViewPager之Fragment页面切换
一.概述 ViewPager是android-support-v4中提供的类,它是一个容器类,常用于页面之间的切换. 继上篇文章<ViewPager之引导页>之后,本文主要介绍ViewPa ...
- ViewPager和Fragment的结合使用fragment里包含着listview的常见问题
在我们开发的过程中可能会遇到类似需求,我们需要做一个左右滑动的tab导航,这个时候有些朋友可能会想到viewpager和fragment的结合来实现这个功能:当然实现的方法不单单着一种.我们这个随笔讨 ...
- viewpager和fragment预加载的解决
在使用Viewpager和fragment处理中会出现预加载的问题,最近看别人的代码,终于找到了一个很好的处理方法 能有效的解决预加载的问题,在fragment都继承一个重写setUserVisibl ...
- 防止ViewPager和Fragment结合使用时候的数据预加载
不知道你们使用ViewPager和Fragment结合的时候发现一个问题没,如果你的每个Fragment都需要请求网络数据,并且你在请求网络数据的时候会加入进度对话框的加载显示效果,当你显示第一个Fr ...
- Android开发之ViewPager+ActionBar+Fragment实现响应式可滑动Tab
今天我们要实现的这个效果呢,在Android的应用中十分地常见,我们可以看到下面两张图,无论是系统内置的联系人应用,还是AnyView的阅读器应用,我们总能找到这样的影子,当我们滑动屏幕时,Tab可 ...
随机推荐
- 【转】Android必备知识点- Android文件(File)操作
Android 使用与其他平台上基于磁盘的文件系统类似的文件系统. 本文讲述如何使用 Android 文件系统通过 File API 读取和写入文件. File 对象适合按照从开始到结束的顺序不跳过地 ...
- Spring笔记02_注解_IOC
目录 Spring笔记02 1. Spring整合连接池 1.1 Spring整合C3P0 1.2 Spring整合DBCP 1.3 最终版 2. 基于注解的IOC配置 2.1 导包 2.2 配置文件 ...
- 关于mybatis条件查询 报错:元素内容必须由格式正确的字符数据或标记组成
原查询 select sum(case when age<=16 then 1 else 0 end ) age1, sum(case when age>16 and age<=25 ...
- spring-boot的spring-cache中的扩展redis缓存的ttl和key名
原文地址:spring-boot的spring-cache中的扩展redis缓存的ttl和key名 前提 spring-cache大家都用过,其中使用redis-cache大家也用过,至于如何使用怎么 ...
- react 插槽(Portals)
前言: 昨天刚看了插槽,以为可以解决我工作中遇到的问题,非常激动,我今天又仔细想了想,发现并不能解决... 不过还是记录一下插槽吧,加深印象,嗯,就酱. 插槽作用: 插槽即:ReactDOM.crea ...
- iOS----------developerDiskImage
真机测试时提示Could not find Developer Disk Image.这该怎么办???? 这是由于真机系统过高或者过低,Xcode中没有匹配的配置包文件,我们可以通过这个路径进入配置包 ...
- Setup script exited with error: command 'x86_64-linux-gnu-gcc' failed with exit status 1 解决办法
今天在Ubuntu16.04 上安装python包的时候,出现了这个坑爹的问题: 解决办法,内容总结如下 情况是这样,报错是因为没有把依赖包安装全,报错情况如下图: 解决办法,先安装一些必须的依赖: ...
- 9102 IT人保持记忆力及健康的方法
做技术时间久了,我们会发现有的时候我们会感觉记忆力衰减太快,前脚刚忙完的事或者刚做完计划任务没多久就遗忘了,或者是以前轻车熟入的方法死活都记不起来了,亦或者之前学习一门技术很快就掌握真谛,现在即便花N ...
- LeetCode算法题-Poor Pigs(Java实现)
这是悦乐书的第235次更新,第248篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第102题(顺位题号是455).有1000个水桶,其中只有一个水桶含有毒药,其余的都没毒 ...
- Error:Cannot run program "svn" (in directory "E:demo\Hello"): CreateProcess error=2,
file-->settings-->version controller --> subversion