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  

转载于:https://www.cnblogs.com/neowu/p/10657356.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/248196.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vs code打开文件显示的中文乱码

这种情况下&#xff0c;一般是编码格式导致的&#xff0c;操作办法&#xff1a; 鼠标点击之后&#xff0c;上面会弹出这个界面&#xff0c;双击选中 然后从UTF-8换到GB2312&#xff0c;或者自己根据情况&#xff0c;更改编码格式 转载于:https://www.cnblogs.com/132818Creator…

操作系统原理之内存管理(第四章第一部分)

内存管理的⽬标&#xff1a;实现内存分配和回收&#xff0c;提高内存空间的利用率和内存的访问速度 一、存储器的层次结构 寄存器&#xff1a;在CPU内部有一组CPU寄存器&#xff0c;寄存器是cpu直接访问和处理的数据&#xff0c;是一个临时放数据的空间。 高速缓冲区&#xff1…

自写图片遮罩层放大功能jquery插件源代码,photobox.js 1.0版,不兼容IE6

版权声明&#xff1a;本文为博主原创文章。未经博主同意不得转载。 https://blog.csdn.net/u010480479/article/details/27362147 阿嚏~~~ 话说本屌丝没啥开发插件的经验&#xff0c;可是天公不作美&#xff0c;公司须要让我自己开发个图片放大的插件 但公司老大的话&#xff0…

黑白两客进入页面(1)

<div><span>欢</span><span>迎</span><span>来</span><span>到</span><span><strong>黑白两客</strong></span><span>的</span><span>博</span><span>客</sp…

zookeeper学习之原理

一、zookeeper 是什么 Zookeeper是一个分布式协调服务&#xff0c;可用于服务发现&#xff0c;分布式锁&#xff0c;分布式领导选举&#xff0c;配置管理等。这一切的基础&#xff0c;都是Zookeeper提供了一个类似于Linux文件系统的树形结构&#xff08;可认为是轻量级的内存文…

前端js基础智能机器人

<script>var flag true;while(flag) {//获取用户输入信息 var code prompt(你好,我是小娜\n请输入编号或者关键词选择功能,输入Q(q)退出聊天\n1.计算\n2.时间\n3.笑话);switch( code ) {case q:case Q:alert(狠心的抛弃了小娜);flag false;break;case 1:case 计算:var…

2018-2019-2 《Java程序设计》第6周学习总结

20175319 2018-2019-2 《Java程序设计》第6周学习总结 教材学习内容总结 本周学习《Java程序设计》第七章和第十章&#xff1a; 内部类&#xff1a; 1.内部类可以使用外嵌类的成员变量和方法。 2.类体中不可以声明类变量和类方法。 3.内部类仅供外嵌类使用。 4.类声明可以使用s…

Hbase基本原理

一、hbase是什么 HBase 是一种类似于数据库的存储层&#xff0c;也就是说 HBase 适用于结构化的存储。并且 HBase 是一种列式的分布式数据库&#xff0c;是由当年的 Google 公布的 BigTable 的论文而生。HBase 底层依旧依赖 HDFS 来作为其物理存储。 二、hbase的列式存储结构 行…

最终的动画函数封装(2)

<button>点击触发1</button><button>点击触发2</button><div></div><style>*{margin: 0;padding: 0;}div{width: 100px;height: 100px;background-color: red;position: relative;top: 100px;left: 0;}.div1{display: block;width: …

第二次JAVA作业

感觉和C语言后面都差不多&#xff0c;就是开头的定义和输入输出有点差别&#xff0c;多写几次应该能搞清楚开头的定义&#xff0c;接下来是四道题目的截图。 第一题&#xff1a; 第二题&#xff1a; 第三题&#xff1a; 第四题&#xff1a; 转载于:https://www.cnblogs.com/YSh…

js(Dom+Bom)第七天(1)

JavaScript BOM介绍 概念 BOM&#xff08;Browser Object Model&#xff09;即浏览器对象模型。 本质&#xff1a; 通过对象抽象浏览器中的一些功能 例如&#xff1a;&#xff08;刷新页面&#xff0c;alert,confirm,pormpt,跳转 ...&#xff09;BOM顶级对象 window对象是js中…

「十二省联考 2019」皮配——dp

题目 【题目描述】 #### 题目背景一年一度的综艺节目《中国好码农》又开始了。本季度&#xff0c;好码农由 Yazid、Zayid、小 R、大 R 四位梦想导师坐镇&#xff0c;他们都将组建自己的梦想战队&#xff0c;并率领队员向梦想发起冲击。 四位导师的**派系**不尽相同&#xff0c;…

链表中环的入口结点

题目描述 给一个链表&#xff0c;若其中包含环&#xff0c;请找出该链表的环的入口结点&#xff0c;否则&#xff0c;输出null。 分析 第一步&#xff1a;确定一个链表中是否有环 我们可以用两个指针来解决&#xff0c;定义两个指针&#xff0c;同时从链表的头结点触发&#xf…

java 线程之线程状态

Thread 类中的线程状态&#xff1a; public enum State {NEW,//新建RUNNABLE,// 执行态BLOCKED, //等待锁&#xff08;在获取锁的池子里&#xff09;WAITING,//等待状态TIMED_WAITING,//定时等待TERMINATED; //终止 } 创建状态&#xff08;NEW&#xff09;&#xff1a;当一个线…

目标元素拖动

<div class"box"><div class"title">拖拽效果</div></div>* {margin: 0;padding: 0;}.box {width: 350px;height: 300px;border: 1px solid #ccc;position: absolute;left: 50%;top: 50%;transform: translate(-50%, -50%);cursor…

操作系统原理之内存管理(第四章第二部分)

一、基本分页存储管理方式 1、分⻚存储管理的基本原理&#xff1a; 页&#xff1a;将⼀个进程的逻辑地址空间分成若⼲个⼤⼩相等的⽚页框&#xff1a;将物理内存空间分成与⻚⼤⼩相同的若⼲个存储块分⻚存储&#xff1a;将进程中的若⼲⻚分别装⼊多个可以不相邻的⻚框中页内碎片…

d3.js 教程 模仿echarts柱状图

由于最近工作不是很忙&#xff0c;隧由把之前的charts项目用d3.js重写的一下&#xff0c;其实d3.js文档很多&#xff0c;但是入门不是很难&#xff0c;可是想真的能做一个完成的&#xff0c;交互良好的图还是要下一番功夫的。今天在echarts找到了一个柱状图&#xff0c;如图。 …

简单的动画函数封装(2)

<div></div><!-- <span></span> --><button class"btn1">点击500</button><button class"btn2">点击800</button>div{width: 100px;height: 100px;background-color: red;position: absolute;top: …

【蔡勒公式 】根据给定的年月日求出对应星期几

蔡勒公式 蔡勒&#xff08;Zeller&#xff09;公式&#xff0c;是一个计算星期的公式&#xff0c;随便给一个日期&#xff0c;就能用这个公式推算出是星期几。时间复杂度&#xff1a;O(1)。具体的在红书P229有。 若要计算的日期是在1582年10月4日或之前&#xff0c;公式则为&am…

放大镜制作(2)—此方法比较容易理解

<div class"box" id"box"><!--左侧的盒子--><div class"left_img"><!--图片--><img src"images/small.jpg" class"aaa" alt"小图片"/><!--黄色小盒子--><div class"…