Android视频媒体播放器

概要:在Android Studio开发环境下实现一个视频媒体播放器程序。
(1)能够播放视频媒体文件;
(2)实现播放、暂停、停止、上一个、下一个功能;
(3)实现媒体文件选择列表;
(4)能处理如媒体文件不存在等常见异常;
(5)可继续扩展,实现功能更加完善的视频媒体播放器。
一、整体布局

<?xml version="1.0" encoding="utf-8"?>  
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    xmlns:app="http://schemas.android.com/apk/res-auto"  
    xmlns:tools="http://schemas.android.com/tools"  
    android:layout_width="match_parent"  
    android:layout_height="match_parent"  
    tools:context=".MainActivity"  
    >  
  
    <info.hoang8f.widget.FButton  
        android:id="@+id/play"  
        android:layout_width="100dp"  
        android:layout_height="wrap_content"  
        android:textStyle="bold"  
        android:textColor="@color/fbutton_color_clouds"  
        android:layout_alignParentTop="true"  
        android:layout_marginRight="5dp"  
        android:text="开始"/>  
  
    <info.hoang8f.widget.FButton  
        android:id="@+id/pause"  
        android:layout_width="100dp"  
        android:layout_height="wrap_content"  
        android:textStyle="bold"  
        android:textColor="@color/fbutton_color_clouds"  
        android:layout_alignParentTop="true"  
        android:layout_centerHorizontal="true"  
        android:layout_marginRight="5dp"  
        android:text="停止"/>  
  
    <info.hoang8f.widget.FButton  
        android:id="@+id/replay"  
        android:layout_width="100dp"  
        android:layout_height="wrap_content"  
        android:textStyle="bold"  
        android:textColor="@color/fbutton_color_clouds"  
        android:layout_alignParentTop="true"  
        android:layout_alignParentRight="true"  
        android:text="重播"/>  
  
    <info.hoang8f.widget.FButton  
        android:id="@+id/next"  
        android:layout_width="100dp"  
        android:layout_height="wrap_content"  
        android:textStyle="bold"  
        android:textColor="@color/fbutton_color_clouds"  
        android:layout_below="@+id/play"  
        android:layout_marginTop="10dp"  
        android:layout_marginRight="5dp"  
        android:text="下一个"/>  
  
    <info.hoang8f.widget.FButton  
        android:id="@+id/up"  
        android:layout_width="100dp"  
        android:layout_height="wrap_content"  
        android:textStyle="bold"  
        android:textColor="@color/fbutton_color_clouds"  
        android:layout_below="@+id/pause"  
        android:layout_marginTop="10dp"  
        android:layout_centerHorizontal="true"  
        android:layout_marginRight="5dp"  
        android:text="上一个"/>  
  
  
  
  
    <VideoView  
        android:id="@+id/Video_view"  
        android:layout_marginTop="120dp"  
        android:layout_width="match_parent"  
        android:layout_height="200dp"/>  
  
    <androidx.recyclerview.widget.RecyclerView  
        android:id="@+id/recyclerview"  
        android:layout_width="match_parent"  
       android:layout_height="391dp"  
        android:layout_below="@id/Video_view"  
        android:layout_alignParentBottom="true"  
        android:layout_marginTop="20dp"/>  
 
</RelativeLayout>  

Android视频媒体播放器_第1张图片
二、视频文件的读取,与异常的处理

public ArrayList<String> getFilesAllName(String path) {  
    File file=new File(path);  
    File[] files=file.listFiles();  
    if (files == null){  
        Log.e("error","空目录");return null;}  
    ArrayList<String> s = new ArrayList<>();  
    for(int j = 0;j<12;j++){  
       for(int i =0;i<files.length;i++) {  
           s.add(files[i].getPath());  
       }  
    }  
    return s;  
}  

三、播放,暂停,停止,下一个,上一个功能

@Override  
   public void onClick(View v) {  
       switch (v.getId()){  
           case R.id.play:  
               videoView.start();  
               break;  
           case R.id.pause:  
               videoView.pause();;  
               break;  
           case R.id.replay:  
               videoView.resume();  
               break;  
           case R.id.next:  
               if (media_index == filePath.size()-1){  
                   Toast.makeText(this, "已经到最后一个视频了", Toast.LENGTH_SHORT).show();  
                   break;  
               }  
               videoView.setVideoPath(filePath.get(++media_index));//指定视频文件路径  
               videoView.start();  
               Toast.makeText(this, "当前是第"+media_index+"个视频", Toast.LENGTH_SHORT).show();  
               break;  
           case R.id.up:  
               if (media_index == 0){  
                   Toast.makeText(this, "已经是第一个视频了", Toast.LENGTH_SHORT).show();  
                   break;  
               }  
               videoView.setVideoPath(filePath.get(--media_index));  
               videoView.start();  
               Toast.makeText(this, "当前是第"+media_index+"个视频", Toast.LENGTH_SHORT).show();  
               break;  
           default:  
               break;  
       }  
   }  ```
四、视频列表的展示

```c
public class MyRecyclerViewAdapter extends RecyclerView.Adapter<MyRecyclerViewAdapter.MyViewHolder> {  
  
   List<String> listPath;  
  
   public MyRecyclerViewAdapter(ArrayList listPath) {  
       this.listPath = listPath;  
   }  
  
   static class MyViewHolder extends RecyclerView.ViewHolder {  
  
       TextView textView;  
  
       public MyViewHolder(@NonNull View itemView) {  
           super(itemView);  
           textView = itemView.findViewById(R.id.textView_media);  
       }  
   }  
  
   @NonNull  
   @Override  
   public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {  
       View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.display_media,parent,false);  
       MyViewHolder viewHolder = new MyViewHolder(view);  
       return viewHolder;  
   }  
  
   @Override  
   public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {  
       holder.textView.setText(listPath.get(position));  
   }  
  
   @Override  
   public int getItemCount() {  
       return listPath.size();  
   }  
RecyclerView
recyclerView.setLayoutManager(new LinearLayoutManager(this));  
adapter = new MyRecyclerViewAdapter(filePath);  
recyclerView.setAdapter(adapter); ```
五、效果图
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200627184036426.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MTg5MzY0Nw==,size_16,color_FFFFFF,t_70)

你可能感兴趣的:(Android,媒体播放器)