Android Studio——简单视频播放器

这篇具有很好参考价值的文章主要介绍了Android Studio——简单视频播放器。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、界面分析

        三个界面:主界面,视频列表界面,视频播放界面,如下图所示:

Android Studio——简单视频播放器Android Studio——简单视频播放器Android Studio——简单视频播放器

 2、实现思路

        (1)主界面设计

           很简单,就一个背景和一个控件,然后为控件设置点击事件,然后跳转到视频列表界面

   activity_main.xml界面

<LinearLayout 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"
    android:background="@drawable/action"
    android:orientation="vertical">
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="进入视频列表"
        android:textColor="@color/white"
        android:textStyle="bold"
        android:textSize="30sp"
        android:layout_marginTop="50dp"
        android:layout_gravity="center"
        android:id="@+id/btlogin"/>

</LinearLayout>

 MainActivity.java类

public class MainActivity extends AppCompatActivity {
    private TextView textView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        textView=(TextView) findViewById(R.id.btlogin);
        textView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent=new Intent(MainActivity.this,MovieActivity.class);
                startActivity(intent);
            }
        });
    }
}

         (2)视频列表界面

        每次跳转都需要建立一个新的Activity,所以先建立一个MovieActivity,然后在对应的xml文件设置列表,因为此界面用到的控件是RecycleView,此控件属于新增的控件,因此需要手动添加依赖项。

        在app/build.gradle文件中添加依赖项,在闭包dependencies中添加如下语句

implementation 'com.android.support:recyclerview-v7:33.0.0'

        注意添加的版本要和此文件中上面代码中显示的版本要一致,否则就会报红,且项目也运行不了。 

Android Studio——简单视频播放器

 activity_movie.xml文件

<LinearLayout 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=".MovieActivity"
    android:orientation="vertical"
    android:background="@drawable/back">
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="视频列表"
        android:textSize="30sp"
        android:gravity="center"
        android:textStyle="bold"
        android:background="@color/black"
        android:textColor="@color/white"/>
    <androidx.recyclerview.widget.RecyclerView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/recyclerview"/>
</LinearLayout>

         列表框架就如下所示,所以看图就可以知道我们还需要对此界面列表中的每一行进行具体的设计

Android Studio——简单视频播放器

         新建一个xml文件,名为movie_item_layout.ml,具体如下所示:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal" >
        <ImageView
            android:layout_width="80dp"
            android:layout_height="80dp"
            android:background="@drawable/image"
            android:id="@+id/movievideo"/>
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/moviename"
            android:text="dianyinm"
            android:textSize="25sp"
            android:layout_marginLeft="10dp"
            android:layout_gravity="center_vertical"/>
</LinearLayout>

        我自己在写的时候,犯了一个小错误,就是在此界面我又添加了背景图,然后就导致了列表里的照片无论怎么设计,每一行的数据都显示在此背景图上,然后另一个数据会显示在另一张图上,就好像分页一样,及其不美观,所以如果在 activity_movie.xml文件中设置了背景图的话,就不用在此xml文件下再次设置了,这个界面是上一个界面的子布局。

        

        界面设置完之后,我们分析以下,视频列表界面有哪些属性呢,有视频名,视频地址,因为此次设计使用的照片都是统一的,所以就不用写在属性里了。

        所以在这里建立实体类Movie.java

public class Movie {
    private String moviename;
    private String movieuri;
    public Movie(String moviename,String movieuri){
        this.moviename=moviename;
        this.movieuri=movieuri;
    }
    public String getMoviename(){
        return moviename;
    }
    public String getMovieuri(){
        return movieuri;
    }
}

        然后就是需要为RecyclerView自定义一个适配器,所以建立一个适配器类,代码如下:

MovieAdapter.java

public class MovieAdapter extends RecyclerView.Adapter<MovieAdapter.ViewHolder> {
    List<Movie> mymovieList;
    public class ViewHolder extends RecyclerView.ViewHolder{
        View movieview;
        TextView moviename;
        public ViewHolder(@NonNull View view){
            super(view);
            moviename=itemView.findViewById(R.id.moviename);
            movieview=view;
        }
    }
    //利用适配器的构造函数传入要展示的数据
    public MovieAdapter(List<Movie> mymovieList){
        this.mymovieList=mymovieList;
    }
    //创建实例,把每一行的布局加载进来,创建一个ViewHolder实例,将布局传入到构造函数中,最后将实例返回
    public MovieAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType){
        View view= LayoutInflater.from(parent.getContext()).inflate(R.layout.movie_item_layout,parent,false);
        final ViewHolder holder=new ViewHolder(view);
        //单击任意视频跳转到播放界面
        holder.movieview.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //获取位置
                int position=holder.getAdapterPosition();
                Movie movie=mymovieList.get(position);
                String mymoviename=movie.getMoviename();
                String mymovievideo=movie.getMovieuri();
                //获取位置后跳转
                Intent intent=new Intent(view.getContext(),PlayActivity.class);
                //然后根据位置传递信息
                intent.putExtra("my",mymoviename);
                intent.putExtra("movieurl",mymovievideo);
                view.getContext().startActivity(intent);
            }
        });
        return holder;
    }
    //对recyclerview中子项目进行赋值,通过位置得到当前的实例,然后电影名和视频显示在控件上
    public void onBindViewHolder(@NonNull MovieAdapter.ViewHolder holder,int position){
        Movie movie=mymovieList.get(position);
        holder.moviename.setText(movie.getMoviename());
    }
    public int getItemCount(){
        return mymovieList.size();
    }
}

        MovieAdapter继承RecyclerView.Adapter,并将泛型指定为MovieAdapter.ViewHolder,因为继承了RecyclerView.Adapter类,所以必须对onCreateViewHolder()、onBindViewHolder、getItemCount()这3个方法重写。

        因为要读取SD卡和访问网络上的视频资源,所以要在androidmanifest.xml文件中设置读取权限,如下所示:

 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"
        tools:ignore="ProtectedPermissions"/>
    <uses-permission android:name="android.permission.INTERNET"/>

        设置完之后可能还获取不了权限,我当时写的时候总是读取不了数据,然后查了资料,才终于弄出来,应该是新的AS软件不仅仅要添加权限,还有单独设置建立一个权限类,然后在读取数据时调用它就可以了。具体如下所示

PermissionUtils.java类

public class PermissionUtils {
    // Storage Permissions
    private static final int REQUEST_EXTERNAL_STORAGE = 1;
    private static String[] PERMISSIONS_STORAGE = {
            Manifest.permission.READ_EXTERNAL_STORAGE,
            Manifest.permission.WRITE_EXTERNAL_STORAGE};
    public static void verifyStoragePermissions(Activity activity) {
        // Check if we have write permission
        int permission = ActivityCompat.checkSelfPermission(activity,
                Manifest.permission.WRITE_EXTERNAL_STORAGE);

        if (permission != PackageManager.PERMISSION_GRANTED) {
            // We don't have permission so prompt the user
            ActivityCompat.requestPermissions(activity, PERMISSIONS_STORAGE,
                    REQUEST_EXTERNAL_STORAGE);
        }
    }
}

        此时,要设置的基本就完成了,接下来就对MovieActivity.java操控了,此界面就是显示列表界面的数据啦,具体如下:

MovieActivity.java

public class MovieActivity extends AppCompatActivity {
    RecyclerView recyclerView;
    List<Movie> movieList;
    MovieAdapter movieAdapter;
    private static final String TAG="MovieActivity";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_movie);
        recyclerView=(RecyclerView) findViewById(R.id.recyclerview);
        initData();
    }
    public void initData(){
        //建立动态数组存放数据
        movieList=new ArrayList<>();
        //获取网络视频
        Movie firstmovie=new Movie("明星大侦探","http://vfx.mtime.cn/Video/2019/03/21/mp4/190321153853126488.mp4");
        movieList.add(firstmovie);
        Movie secondmovie=new Movie("哈哈哈哈哈","https://www.dglydz.com/mov-hahahahahadierji.html");
        movieList.add(secondmovie);
        //获取本工程中的视频
        Movie thirdmovie=new Movie("等到苦尽甘来时,待我给你讲来时的路","android.resource://"+getPackageName()+"/"+R.raw.read);
        movieList.add(thirdmovie);
        Movie forthmovie=new Movie("阳光开朗孔乙己","android.resource://"+getPackageName()+"/"+R.raw.why);
        movieList.add(forthmovie);
        //获取模拟器中的视频
        Movie fifthmovie=new Movie("我会等","file:///storage/emulated/0/Pictures/waitting.mp4");
        movieList.add(fifthmovie);
        Movie sixthmovie=new Movie("稻香","file:///storage/emulated/0/Pictures/jay.mp4");
        movieList.add(sixthmovie);
        //将视频显示在控件上
        movieAdapter=new MovieAdapter(movieList);
        StaggeredGridLayoutManager layoutManager=new StaggeredGridLayoutManager(1,StaggeredGridLayoutManager.VERTICAL);
        recyclerView.setLayoutManager(layoutManager);
        recyclerView.setAdapter(movieAdapter);
    }
}

        (3)播放界面

        新建Activity此界面就是获取从列表传过来的视频名和视频地址,然后进行播放,具体代码如下:

activity_play.xml

<LinearLayout 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=".PlayActivity"
    android:orientation="vertical"
    android:background="@drawable/back">
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/tvmovename"
        android:text="name"
        android:layout_marginTop="30dp"
        android:textSize="40sp"
        android:gravity="center"
        android:textStyle="bold"/>
    <VideoView
        android:layout_width="match_parent"
        android:layout_height="400dp"
        android:id="@+id/vvmovie"
        android:layout_marginTop="10dp"/>
</LinearLayout>

PlayActivity.java

public class PlayActivity extends AppCompatActivity {
     private TextView tvvedioname;
     private VideoView videoView;
     //媒体控制器
    private MediaController mediaController;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_play);
        tvvedioname= findViewById(R.id.tvmovename);
        videoView=findViewById(R.id.vvmovie);
        mediaController=new MediaController(this);
        initData();
        verifyStoragePermissions(this);
    }
    public void initData(){
        //获取从音乐列表传过来的视频名称和地址
        String videoname=getIntent().getStringExtra("my");
        String videouri=getIntent().getStringExtra("movieurl");
        //String videourl= Environment.getExternalStorageDirectory().getAbsolutePath()+"/jay.mp4";
        //Log.i("PlayActivity","videourl="+videourl);
        //将视频名称显示在文本框中,将视频地址关联到播放器中
        tvvedioname.setText(videoname);
        videoView.setVideoPath(videouri);
        //videoView.setVideoPath(videourl);
        //将视频播放器和媒体控制柄关联起来
        videoView.setMediaController(mediaController);
        //媒体控制柄和视频播放器关联起来
        mediaController.setMediaPlayer(videoView);
        //启动视频播放器播放视频
        videoView.start();
    }
}

        三个不同路径(网络/文件夹内/模拟器里的视频)的视频的加载如下所示,具体的知识点就不描述了,基本代码上都有备注。 

Android Studio——简单视频播放器Android Studio——简单视频播放器Android Studio——简单视频播放器

 文章来源地址https://www.toymoban.com/news/detail-468615.html

 

到了这里,关于Android Studio——简单视频播放器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Android Studio 做一个 MP3 播放器

    Android Studio 本身提供了多个音频播放器组件,可以通过这些组件来实现音频播放功能,其中包括 MediaPlayer、SoundPool 和 ExoPlayer 等。官方推荐我们使用ExoPlayer因为功能更强大,但这里用MediaPlayer因为编写更简单。 在使用 MediaPlayer 实现 MP3 播放器时,需要注意以下几点: 在使用

    2024年02月04日
    浏览(41)
  • Android学习6——视频播放器

    一、学习目标 1. 综合应用课程知识。 2. 掌握 App 开发流程及相关工具。 3. 设计 一个基于 Android 平台的简单视频播放器。 二、环境 1.JDK-15.0.2 以上 2.Android Studio 4.1 以上 3.Android 10.0 ( API level 29 ) 三、内容 软件功能简介 (1) 能够播放 3gp, .mp4 等文件; (2) 能处理简单的异常,例

    2024年02月01日
    浏览(74)
  • Android开发之视频播放器

    今天教大家做一个简单的视频播放器hh 至此,结束!

    2023年04月09日
    浏览(38)
  • Android 视频播放器dkplayer

    gihub地址 : https://github.com/Doikki/DKVideoPlayer GitHub - Doikki/DKVideoPlayer: Android Video Player. 安卓视频播放器,封装MediaPlayer、ExoPlayer、IjkPlayer。模仿抖音并实现预加载,列表播放,悬浮播放,广告播放,弹幕,视频水印,视频滤镜 列表播放如图所示: 一、依赖 二、工具类 Tag.java Vi

    2024年02月13日
    浏览(33)
  • Android Studio初学者实例:仿网易音乐播放器

    本期带来的是以Service为主要的知识点的网易音乐播放器 看一下效果图  首先项目准备: 在res下新建raw文件夹,并在文件夹中添加喜爱的mp3音乐  OK,第一步,先写一个背景文件,在res/drawable文件夹中新建xml文件: btn_bg_selector.xml  编写主界面代码activity_main.xml 编写MusicServic

    2024年02月05日
    浏览(33)
  • Android Studio初学者实例:音乐播放器与Service学习

    本次一个案例实现的一个简单的音乐播放器 用到的知识点最主要的几点是:Service、handler(实现音乐播放的进度条更新与图片旋转)以及用于播放音频的MediaPlayer 看一下案例效果:  由于Service是Android的四大组件之一,Activity、Service等等一个重要知识点就是生命周期的问题,

    2024年02月03日
    浏览(30)
  • 简单小项目:基于Mplayer的视频播放器(Linux)

    目录 0 视频演示  1 makefile 2 头文件  public.h  show.h do.c 3 源文件.c  主函数main.c show.c   do.c 4 项目资源下载  https://download.csdn.net/download/m0_58193842/87371186?spm=1001.2014.3001.5503     0.以文件的形式存储软件的日志信息     1.该程序能够加载指定路径下所有的音视频文件     (.mp3

    2024年02月15日
    浏览(26)
  • 青岛华为云代理商:android视频网络播放器

    简介: 飞机@luotuoemo 本文由(华为云国际站代理商:【聚搜云】www.4526.cn )撰写 目录 青岛华为云代理商:android视频网络播放器 青岛华为云代理商:android视频网络播放器 1. 引言 2. 华为云的优势 2.1 强大的云计算能力 2.2 安全可靠的存储服务 2.3 多地域分布的内容分发网络 2

    2024年01月18日
    浏览(43)
  • 简单版本视频播放服务器V3-前端优化-播放器在左,列表在右侧【推荐】【完成】

    做个家用版本的家庭影院,通过这个服务器可以给电脑,平板,手机等设备提供直接播放电影的作用,通过离线下载电影放入目录里就是就可以给全家提供电影播放了,通过浏览器就是可以访问电脑里面的视频,实现简单的家庭版本服务了。 1.0最终代码:【前端以这个为主;

    2024年02月16日
    浏览(28)
  • Flutter视频播放器在iOS端和Android端都能实现全屏播放

    Flutter开发过程中,对于视频播放的三方组件有很多,在Android端适配都挺好,但是在适配iPhone手机的时候,如果设置了 UIInterfaceOrientationLandscapeLeft 和 UIInterfaceOrientationLandscapeRight 都为false的情况下,无法做到全屏播放,因为FLutter的 SystemChrome.setPreferredOrientations 方法不适配iOS端

    2024年02月05日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包