视频引导页

videoview实现视频引导页及从assets文件中读取文件到本地SD卡 阅读详情

github大神做的,传送门:https://github.com/linglongxin24/WelcomeVideoPager,可以先去看看效果。很棒的!!

大概流程如下:

1、准备需要播放的视频资源文件,res目录下新建raw文件夹,把需要播放的3个mp4文件放进去(资源文件可以去上面的github项目中下载),如下图:
这里写图片描述

2、设置xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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"
    tools:context=".activity.MainActivity">
    <android.support.v4.view.ViewPager
        android:id="@+id/viewpager"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
    <Button
        android:id="@+id/start_app"
        android:layout_width="wrap_content"
        android:layout_height="36dp"
        android:text="开启体验"
        android:textColor="@android:color/white"
        android:layout_centerHorizontal="true"
        android:layout_alignParentBottom="true"
        android:layout_marginBottom="60dp"
        android:paddingLeft="12dp"
        android:paddingRight="12dp"
        android:visibility="invisible"
        android:background="@drawable/btn_style"/>
</RelativeLayout>

3、activity代码:

package com.example.administrator.demo.activity;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.view.ViewPager;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

import com.example.administrator.demo.R;
import com.example.administrator.demo.adapter.MyPageAdapter;
import com.example.administrator.demo.fragment.GuildFragment;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends FragmentActivity implements View.OnClickListener{
    private ViewPager viewpager;
    private List<Fragment> fragments;
    private Button start_app;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        viewpager = (ViewPager) findViewById(R.id.viewpager);
        initData();
        initView();
        viewpager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

            }

            @Override
            public void onPageSelected(int position) {
                start_app.setVisibility(View.INVISIBLE);
                if(position==2){
                    start_app.setVisibility(View.VISIBLE);
                }
            }

            @Override
            public void onPageScrollStateChanged(int state) {

            }
        });
    }

    /**
     * 初始化数据,添加三个Fragment
     */
    private void initData() {
        fragments = new ArrayList<>();

        Fragment fragment1 = new GuideFragment();
        Bundle bundle1 = new Bundle();
        bundle1.putInt("index", 1);
        fragment1.setArguments(bundle1);
        fragments.add(fragment1);

        Fragment fragment2 = new GuideFragment();
        Bundle bundle2 = new Bundle();
        bundle2.putInt("index", 2);
        fragment2.setArguments(bundle2);
        fragments.add(fragment2);

        Fragment fragment3 = new GuideFragment();
        Bundle bundle3 = new Bundle();
        bundle3.putInt("index", 3);
        fragment3.setArguments(bundle3);
        fragments.add(fragment3);
    }

    private void initView() {
        start_app = (Button) findViewById(R.id.start_app);
        start_app.setOnClickListener(this);
        viewpager.setAdapter(new MyPageAdapter(getSupportFragmentManager(),fragments));
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.start_app:
                Toast.makeText(this,"开启体验",Toast.LENGTH_SHORT).show();
                break;
        }
    }
}

adapter:

package com.example.administrator.demo.adapter;

import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;

import java.util.List;


public class MyPageAdapter extends FragmentPagerAdapter {
    private List<Fragment> fragments;

    public MyPageAdapter(FragmentManager fm,List<Fragment> fragments) {
        super(fm);
        this.fragments = fragments;
    }

    @Override
    public Fragment getItem(int position) {
        return fragments.get(position);
    }

    @Override
    public int getCount() {
        return fragments.size();
    }
}

其次,GuideFragment:

package com.example.administrator.demo.fragment;

import android.net.Uri;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import com.example.administrator.demo.R;
import com.example.administrator.demo.view.CustomVideoView;

public class GuideFragment extends Fragment {

    private CustomVideoView customVideoView;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        customVideoView = new CustomVideoView(getContext());
        /**获取参数,根据不同的参数播放不同的视频**/
        int index = getArguments().getInt("index");
        Uri uri;
        if (index == 1) {
            uri = Uri.parse("android.resource://" + getActivity().getPackageName() + "/" + R.raw.guide_1);
        } else if (index == 2) {
            uri = Uri.parse("android.resource://" + getActivity().getPackageName() + "/" + R.raw.guide_2);
        } else {
            uri = Uri.parse("android.resource://" + getActivity().getPackageName() + "/" + R.raw.guide_3);
        }
        /**播放视频**/
        customVideoView.playVideo(uri);
        return customVideoView;
    }

    /**
     * 记得在销毁的时候让播放的视频终止
     */
    @Override
    public void onDestroy() {
        super.onDestroy();
        if (customVideoView != null) {
            customVideoView.stopPlayback();
        }
    }
}

最后,CustomVideoView:

package com.example.administrator.demo.view;

import android.content.Context;
import android.media.MediaPlayer;
import android.net.Uri;
import android.util.AttributeSet;
import android.view.View;
import android.widget.VideoView;

public class CustomVideoView extends VideoView {
    public CustomVideoView(Context context) {
        super(context);
    }

    public CustomVideoView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    public CustomVideoView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        setMeasuredDimension(View.MeasureSpec.getSize(widthMeasureSpec), View.MeasureSpec.getSize(heightMeasureSpec));
    }

    /**
     * 播放视频
     *
     * @param uri 播放地址
     */
    public void playVideo(Uri uri) {
        if (uri == null) {
            throw new IllegalArgumentException("Uri can not be null");
        }
        /**设置播放路径**/
        setVideoURI(uri);
        /**开始播放**/
        start();
        setOnPreparedListener(new MediaPlayer.OnPreparedListener() {

            @Override
            public void onPrepared(MediaPlayer mp) {
                /**设置循环播放**/
                mp.setLooping(true);
            }
        });
        setOnErrorListener(new MediaPlayer.OnErrorListener() {

            @Override
            public boolean onError(MediaPlayer mp, int what, int extra) {
                return true;
            }
        });
    }
}
构建iOS视频引导页实例教程 AVFoundation是苹果公司提供的一套强大的媒体处理框架,它的主要作用是让开发者能够处理各种音视频资源。该框架的优势在于其丰富的API能够帮助开发者高效地完成视频的录制、播放以及音视频的编辑。相比CoreMedia与QuickTime框架,AVFoundation提供了更为现代和面向对象的接口,简化了音视频的处理流程,减少了开发者的学习成本。框架中提供了一系列的类和协议,例如AVPlayer、AVPlayerItem和AVAsset等,这些组件提供了对视频播放、控制以及媒体资源的管理功能。 阅读详情

相关推荐

android引导页播放视频

引导页播放视频,主要是CustomVideoView来实现在引导页播放视频。

2023 全新视频背景动态引导页面HTML源码

2023 全新视频背景动态引导页面HTML源码。非常的炫酷,有需要的自行去体验吧,还是非常不错的。

303

贼鸡儿好看的HTML5引导页源码

HTML5编写的引导页,非常大气、漂亮、上档次,主要采用的下拉滚动的方式,HTML5,自适应客户端,同时支持PC端和移动端。

iOS 学习笔记(一) 视频引导页的制作

话不多说 先上图基本思路 1.把 AVPlayerLayer加载到 UIView 上 UIView 加载到 ScrollView上,讲player加载到一个可变数组里 2.滑动 ScrollView的时候切换 view 的页面 切换 view 的页面,先把上一个页面的播放器暂停并且把它重置到初始状态 将当前也页面的播放器从数组里面取出加载播放 1.准备步骤 (1)几个本地视频资源 这里示例讲到的是

付佳 Stay Hungry Stay Foolish 1661

视频背景网址导航引导页面源码.zip

视频背景网址导航引导页面源码

STM32F103C8T6用官方bootloader实现IAP升级操作方法

在使用STM32F103C8T6单片机IAP功能时,可以自己写bootloader程序,也可以使用官方bootloader文件。下面说一下使用官方bootloader的使用方法。 首先下载官方bootloader文件 目前使用的是这个版本,打开文件夹,选择适合自己编译器的工程。 目前使用的是keil,所以打开MDK-ARM文件夹 打开IAP工程 打开后根据自己的单片机型号,对工程进行简单的修...

HXYDJ的博客 1万+

Android自定义VideoView—实现app引导页播放视频欢迎效果

CustomVideoView package com.lgl.mp4index; import android.content.Context; import android.media.MediaPlayer; import android.util.AttributeSet; import android.view.KeyEvent; import android.widget.VideoView; /** * 视频播放,主要是因为手机的大小很多,不能保证原生的VideoView能实现全屏

JiYaRuo的博客 795

T-Box功能详解及应用

T - BOX,其全称为 Telematics Box,作为远程 / 车载通信模块,是一款集车身网络与无线通讯功能于一体的智能终端设备。它充当了多媒体车机与 TSP(汽车远程服务提供商)以及互联网之间的无线路由器角色,为用户创造了远程访问的可能。用户借助T - BOX能够对车辆配备的各个 ECU(电子控制单元)进行远程操控,包括远程启动或停止发动机开启或关闭空调天窗后备箱门车门,以及实现闪灯鸣笛等功能。

wgl110110的博客 5640

矢泽妮可二次元html视频动态引导页源码

矢泽妮可二次元html视频动态引导页源码源码由HTML+CSS+JS组成,记事本打开源码文件可以进行内容文字之类的修改,双击html文件可以本地运行效果,也可以上传到服务器里面,重定向这个界面。

专注于与编程相关的知识内容分享 254

从零开始!在 Windows 上安装与配置 Dify

这篇博客将详细介绍如何在 Windows 系统上部署 Dify,适合零基础用户。从 Docker 和 WSL 的安装配置开始,逐步指导用户设置 Git、Docker 环境以及 Dify 配置文件,解决可能遇到的端口冲突等问题,最终完成 Dify 的启动和测试。通过简明易懂的步骤,帮助用户在本地成功运行 Dify,实现模型供应商配置,让 Dify 项目在 Windows 平台上顺利上线。

qq_49035156的博客 5万+

HFSS仿真3dB微带双分支定向耦合器学习笔记

设计一个3dB微带双分支定向耦合器,各端口微带线特性阻抗为50Ω,中心频率为5GHz,介质基板的介电常数9.6,基板厚度为0.8mm这里重点讲解HFSS的操作,关于理论知识后面文章更新。

qq_36521926的博客 7769

一款超好看流行的HTML随机视频播放背景引导页面源码

2024新版视频背景网址导航引导页面源码带背景动态HTML源码,非常的炫酷,有需要的自行去体验吧,还是非常不错的。今天宋佳乐博客给大家带来一款2024新版视频背景网址导航引导页面源码带背景动态HTML源码。

宋佳乐旗下博客 885

GD32F105RBT6 keil工程模板

创建GD32F105RBT6的keil初始基础工程,未来的所有外设驱动都是基于这个基础工程进行扩展。

RMDYBW的博客 1926

短视频平台源码,开屏后的广告引导页

短视频平台源码,开屏后的广告引导页 1、打开Android Studio,新建一个项目StartDemo,新建一个activity页面,命名为StartActivityStartActivity.java代码如下。先判断是否第一次启动app,如果是,则进入引导页;如果不是,则直接进入首页。 2、在AndroidManifest.xml文件中,将启动页面设置为.StartActivity 3、新建一个activity页面,命名为IntroducttoryActivity在IntroducttoryActivi

云豹网络科技 1456

伪距单点定位推导+DOP值分析(附matlab仿真代码)

伪距单点定位公式推导、DOP值分析与matlab仿真分析

shannanshouyin的博客 2513

STM32实现简单的智能电梯控制

上述代码实现了一个简单的智能电梯控制器。电梯的状态包括IDLE(停止)、UP(向上移动)和DOWN(向下移动)三种状态。通过向上和向下按钮的按下,可以控制电梯移动到指定的楼层。在主循环中,不断读取当前楼层的按钮状态,并根据电梯状态决定执行的动作。具体的楼层数量和按钮的GPIO引脚可以根据实际情况进行调整。要实现简单的智能电梯控制,我们可以使用STM32微控制器来实现。

2401_85258012的博客 336

Android引导页播放视频——使用VideoView

有时候大家看到QQ等软件的引导页,播放一段酷炫的视频,觉得很有意思,于是就会想要尝试自己去实现以下。其实很简单,用VideoView就可以实现。 首先,创建定义的VideoView。 public class CustomVideoView extends VideoView { public CustomVideoView(Context context) { sup

hunter800421的专栏 3099

【ComfyUI专栏】ComfyUI 常用工作流下载与分享网址

首先我们来分享第一个网站,Openart 网站,这个网站同时也能提供比较多的其他类型。但是如果希望下载工作流,我们可以访问到如下的这个站点。作为ComfyUI的学习用户来说,我们通常需要借助他山之石来帮助我们快速成长,因此我们需要找到能够分享和下载的网址。,当前网站是综合性网站,在网站中可以下载各种不同的类型,其中工作流只是可以下载的非常小的部分。这个网站也可以浏览不同的工作流,这个工作流的地址和访问如下的站点。

技术与管理的平衡木- 7796

炫酷引导页带视频源码

介绍: 背景为视频播放,动态效果html引导页,需要的可以下载 网盘下载地址: http://kekewl.net/8bdut8Uu84B0 图片:

banzhuan678的博客 577

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

swift有一句代码搞定APP引导页(图片/GIF/视频)

APP启动引导页(图片/gif/视频) 在APP启动时候设置引导页,不管图片,gif,还是视频只需要一个方法 视频引导页 视频核心代码如下 URL为本地视频地址,如果为网络视频 建议预下载在本地然后下次进行播放 init(videoURL: URL, isHiddenSkipButton: Bool) { let frame = CGRect.init(x: 0, y: 0, ...

SingleYan的博客 1349

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

2023 随机背景视频引导页网站源码

2023 随机背景视频引导页网站源码2023 随机背景视频引导页网站源码2023 随机背景视频引导页网站源码。所有内容都在index.html文件里面更改。

479

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

iOS引导页,可选是视频或者是图片swift版

一个app引导页的封装,可以选择用图片滚动或者是播放视频 使用: 项目源码:GitHub项目地址

Mr_Jesson的博客 1443

自适应随机全背景视频引导页个人主页

纯代码实现自适应个人主页引导页,全背景视频随机视频,声音可开关!

宋佳乐旗下博客 182

超级好看动态视频引导页源码

超级好看动态视频引导页源码,源码由HTML+CSS+JS组成,记事本打开源码文件可以进行内容文字之类的修改,双击html文件可以本地运行效果,也可以上传到服务器里面,重定向这个界面。

优快云专家-微编程的博客 830
上一篇: 日夜间模式的切换
下一篇: 使用阿里云实现简单的直播
尘彦
博客等级 码龄11年 92粉丝 22原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

尘彦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值