• 聊聊视频播放那些事1


    问题:

    头条西瓜视频等app从视频列表到详情页,所播放的视频无逢连继播放?怎么做的?

    不知道怎么做的,不想反编,也看不懂。

    先来看一下这段话:

    “碎片(Fragment)是一种可以嵌入在活动当中的UI片段”

    Fragment 不光是可以给一个Activity用的这大家都知道。

    好吧,把activity1在播的fragment直接塞到activity2。

    这么做可以吗?不可以吗?到底可以吗?自已试吧。,以我的知识判断是可以的。就不试验了。

    我做个更离奇的事。我从Activity1,摘一个view,然后放到Activity2去用!!!

    我从Activity1,摘一个view,然后放到Activity2去用!!!

    我从Activity1,摘一个view,然后放到Activity2去用!!!

    重要的说三遍。

    可以吗?fragment可以。View也是可以的。

    上代码。

    Activity1:如下

    package com.example.administrator.videotest;
    
    import android.annotation.SuppressLint;
    import android.content.Intent;
    import android.content.res.AssetFileDescriptor;
    import android.graphics.SurfaceTexture;
    import android.media.MediaPlayer;
    import android.os.Bundle;
    import android.support.v7.app.AppCompatActivity;
    import android.view.Surface;
    import android.view.TextureView;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.Button;
    
    public class Main2Activity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main2);
            StaticHolder.textureView = findViewById(R.id.tv);
            StaticHolder.textureView.setSurfaceTextureListener(new TextureView.SurfaceTextureListener() {
                @Override
                public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) {
                    initMediaPlayer(new Surface(surface));
                }
    
                @Override
                public void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, int height) {
    
                }
    
                @Override
                public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) {
                    return false;
                }
    
                @Override
                public void onSurfaceTextureUpdated(SurfaceTexture surface) {
    
                }
            });
    
    
            Button button = findViewById(R.id.bt);
            button.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent i = new Intent(Main2Activity.this, Main3Activity.class);
                    startActivity(i);
                    ((ViewGroup) StaticHolder.textureView.getParent()).removeView(StaticHolder.textureView);
                }
            });
        }
    
        MediaPlayer mediaPlayer;
    
        @SuppressLint("NewApi")
        public void initMediaPlayer(Surface surface) {
            try {
                mediaPlayer = MediaPlyerHelper.getMediaPlayer();
                mediaPlayer.setSurface(surface);
                mediaPlayer.setOnBufferingUpdateListener(new MediaPlayer.OnBufferingUpdateListener() {
                    @Override
                    public void onBufferingUpdate(MediaPlayer mp, int percent) {
    
                    }
                });
                mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
                    @Override
                    public void onCompletion(MediaPlayer mp) {
                        mp.start();
                    }
                });
                mediaPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() {
                    @Override
                    public boolean onError(MediaPlayer mp, int what, int extra) {
                        return false;
                    }
                });
    
                AssetFileDescriptor fileDescriptor = getAssets().openFd("sample.mp4");
                mediaPlayer.setDataSource(fileDescriptor);
                mediaPlayer.prepare();
                mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
                    @Override
                    public void onPrepared(MediaPlayer mp) {
                        mp.start();
                    }
                });
    
    
            } catch (Exception e) {
                e.printStackTrace();
            }
    
        }
    }
    package com.example.administrator.videotest;
    
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.widget.RelativeLayout;
    
    public class Main3Activity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main3);
            RelativeLayout rl = findViewById(R.id.rl);
            rl.addView(StaticHolder.textureView);
        }
    }

    代码很简单,不会看不懂吧。不解释了。

    看到效果了,可以的哦。既然可以,那么可以做的事就多了。

    先到这儿,下篇接聊无缝播放。

  • 相关阅读:
    面试题中关于String的常见操作
    base64 加密 解密 Java代码实现 【尝试 博客园 用Markdown 编写】
    md5 32位 加密原理 Java实现md5加密
    base64 加密原理 解密原理
    2018年 10月份开始执行的最新税率表 2019年1月 小孩住房贷款等怎么扣
    安装Zookeeper和kafka,安装完毕后,遇到的错误
    Jmeter自动化测试 数据驱动测试,将数据存入csv文件中来调用,或将数据存在DB中进行调用
    Jmeter 同一个测试计划下的多个线程组 执行顺序 希望调整为顺序执行
    Json多层嵌套,要怎么提取?
    总结下我遇到过的接口测试
  • 原文地址:https://www.cnblogs.com/mamamia/p/9476719.html
Copyright © 2020-2023  润新知