1 前言

在线视频播放
搜索
分类
全屏
评论列表
收藏数
分享数
分享
热门搜索词
清除缓存
每日图片


效果图如下:




以上四张效果图,仅仅展示了主页的UI,本想录制视频,但是都超过了大小限制,无法上传。

2 申明

以上效果图以及整个在线视频APP的代码,仅仅作为学习交流之用,不可用于任何商业之用,由此出现的任何问题与作者本人无关!

3 架构设计

3.1 模块化

整个APP的架构设计模块化开发,大的方向上设计四个模块,分别对应首页的四个fragment。

    if (isNeedHomeModule.toBoolean()) {api project(':module_home')}if (isNeedChatModule.toBoolean()) {api project(':module_chat')}if (isNeedRecomModule.toBoolean()) {api project(':module_recom')}if (isNeedMeModule.toBoolean()) {api project(':module_me')}


以上四个模块作为APP的主要模块,四个模块之间不可直接交互应用,他们之间的交互全部通过ARouter路由进行。

在这四个模块之下,有lib_icon模块、lib_base模块、network模块,这三个模块为以上四个主要模块提供支持。
lib_icon模块提供整个APP的资源支持,公共资源均可以放在这里
lib_base模块提供主要代码级别的支持,主要基类,公用类等
network模块提供整个APP的网络请求支持

另外需要说明的是,上面的四个主要模块可以作为APP主要的入口,由此四个模块可单独运行测试,如果在APP体量特别大的情况下,能够单独运行,大大减小测试开发力度。这也是ARouter的一个好处。

3.2 MVP

public interface IView {}
public interface IPresenter {/*** destroy*/void destroy();
}
public abstract class BasePresenter<T extends IView> implements IPresenter {protected T iView;public BasePresenter(T iView) {this.iView = iView;}@Overridepublic void destroy() {iView = null;}
}

以上涉及IView接口扩展整个UI包括activity和fragment。
BasePresenter抽象类类实现UI相关的逻辑

举例欢迎页

public interface LaunchContract {interface LaunchView extends IView {/*** 设置首页图片* @param url string*/void showFlash(String url);/*** load launch fail*/void loadLaunchFail();}interface LaunchPresenter {/*** 获取图片*/void getImage();}}

欢迎页LaunchContract 接口包括了两个接口,这两个接口中声明了UI和presenter交互的接口,实现类中实现这两个接口即可,并且,view和presenter的交互只有以上声明的方法才能调用,这样逻辑清晰。

欢迎页实现类如下:

public class LaunchActivity extends BaseActivity implements LaunchContract.LaunchView {private static final int SLEEP_TIME = 6000;private static final int REQUEST_PERMISSION_SETTING = 99;@BindView(R.id.splash_root)ImageView mSplashRoot;private LaunchPresenter mLaunchPresenter;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_launch);mUnBinder = ButterKnife.bind(this);mLaunchPresenter = new LaunchPresenter(this);requestPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.READ_PHONE_STATE);}@Overridepublic void showFlash(String url) {GlideUtil.Companion.showImage(LaunchActivity.this, mSplashRoot, url, new GlideUtil.Companion.ImageListener() {@Overridepublic void onFailed() {}@Overridepublic void onReady(@NotNull Drawable resource) {runAlphaAnim(resource);}});}....................................
}

LaunchActivity 类实现LaunchContract.LaunchView接口,声明LaunchPresenter对象

public class LaunchPresenter extends BasePresenter<LaunchContract.LaunchView> implements LaunchContract.LaunchPresenter {public LaunchPresenter(LaunchContract.LaunchView iView) {super(iView);}@Overridepublic void getImage() {}}

LaunchPresenter 类实现LaunchContract.LaunchPresenter接口

以上整个MVP的逻辑架构,将逻辑与UI分离,代码更加清晰。

4 开发环境

Java1.8
Kotlin
Android 28
Android build tools 28.0.3
Android Studio 3.5Gradle plugin tool version 3.1.0
Gradle 4.10.1

5 主要三方库

 // a routerapi "com.alibaba:arouter-api:${rootProject.ext.arouter_api_v}"kapt "com.alibaba:arouter-compiler:${rootProject.ext.arouter_compile_v}"// fast jsonapi "com.alibaba:fastjson:${rootProject.ext.fast_json_v}"// retrofitapi "com.squareup.retrofit2:retrofit:${rootProject.ext.retrofit_v}"api "com.squareup.retrofit2:converter-gson:${rootProject.ext.retrofit_v}"// butter knifeapi "com.jakewharton:butterknife:${rootProject.ext.butter_knife_v}"kapt "com.jakewharton:butterknife-compiler:${rootProject.ext.butter_knife_v}"// leak canarydebugApi "com.squareup.leakcanary:leakcanary-android:${rootProject.ext.leakcanary_v}"releaseApi "com.squareup.leakcanary:leakcanary-android-no-op:${rootProject.ext.leakcanary_v}"debugApi "com.squareup.leakcanary:leakcanary-support-fragment:${rootProject.ext.leakcanary_v}"// rxjavaapi "io.reactivex.rxjava2:rxjava:${rootProject.ext.rxjava_v}"api "io.reactivex.rxjava2:rxandroid:${rootProject.ext.rxandroid_v}"api 'com.squareup.retrofit2:adapter-rxjava2:2.3.0'//android event busapi "org.simple:androideventbus:${rootProject.ext.android_event_bus_v}"// event busapi "org.greenrobot:eventbus:${rootProject.ext.eventbus_v}"//glideapi("com.github.bumptech.glide:glide:${rootProject.ext.glide_v}") {exclude group: "com.android.support"}annotationProcessor "com.github.bumptech.glide:compiler:${rootProject.ext.glide_v}"kapt "com.github.bumptech.glide:compiler:${rootProject.ext.glide_v}"api "com.android.support:multidex:${rootProject.ext.multidex_v}"api 'com.youth.banner:banner:1.4.10'api 'com.hyman:flowlayout-lib:1.1.2'api 'cn.jzvd:jiaozivideoplayer:7.0.5'api 'cn.carbs.android:ExpandableTextView:1.0.3'

代码就不公开了,想要源代码的同学,给我发邮件吧(nyyin@qq.com)

再次声明,代码仅仅学习之用,严禁商业之用~!


欢迎关注公众号:技术印象

Android-在线视频播放器实现相关推荐

  1. Android 在线视频播放器(Vitamio)

    概述 Vitamio 是一款 Android 与 iOS 平台上的全能多媒体开发框架,全面支持硬件解码与 GPU 渲染,底层音视频解码原理基于FFmpeg开发.Vitamio 凭借其简洁易用的 API ...

  2. android在线视频播放器源码,请问谁有Android视频播放器简单源码

    qq_岁月永恒_0 2018-12-18 10:51 package com.example.mp4; import java.io.IOException; import com.example.m ...

  3. 播放视频android学习笔记---44_在线视频播放器,网络视频解析器,SurfaceView 控件使用方法...

    最近用使开辟的过程中涌现了一个小题问,顺便录记一下因原和法方--播放视频 44_在线视频播放器 ------------------------- 1.注意这里,在模拟器中,android2.2和an ...

  4. android学习笔记---44_在线视频播放器,网络视频解析器,SurfaceView 控件使用方法

    44_在线视频播放器 ------------------------- 1.注意这里,在模拟器中,android2.2和android2.1视频是没有播放效果的,这个主要是因为模拟器的原因和程序代码 ...

  5. 实现在Android本地视频播放器开发

    在Android本地视频播放器开发中的搜索本地视频章节中,我们能够搜索本地视频并且显示每个视频的图片.标题.时间长度,当然如果需要添加其他的例如视频的长度和宽度可以使用Video类中的方法,既然我们获 ...

  6. Android本地视频播放器开发--视频解码

    在上一章Android本地视频播放器开发--SDL编译编译中编译出sdl的支持库,当时我们使用的2.0,但是有些api被更改了,所以在以下的使用者中我们使用SDL1.3的库,这个库我会传上源码以及编译 ...

  7. 基于android的视频播放器,基于Android的视频播放器的设计与实现-.doc

    基于Android的视频播放器的设计与实现- 基于Android的视频播放器的设计与实现 中 文 摘 要 如今,随着基于Android的智能手机的,.因此,设计一个基于android手机的多功能播放器 ...

  8. android 编译 sdl,SDL编译 - Android本地视频播放器开发_Linux编程_Linux公社-Linux系统门户网站...

    在上一章  Android本地视频播放器开发--ffmpeg解码视频文件中的音频(2)[http://www.linuxidc.com/Linux/2013-06/85955p5.htm]中使用Ope ...

  9. Android 节操视频播放器jiecaovideoplayer使用

    Android 节操视频播放器jiecaovideoplayer使用 特点: 全屏时启动新Activity实现播放器真正的全屏功能 能在ListView.ViewPager和ListView.View ...

  10. Python+QT+Selenium制作在线视频播放器

    最近突然想做一个视频播放器,可以在线看视频,关键还没用广告,不用会员,下面给大家介绍一下怎么制作 工具: Python Qt phantomjs 先给大家展示一下效果 下面上代码 导入库: from ...

最新文章

  1. IDEA一定要懂的32条快捷键
  2. 浅析企业网站排名低可能是哪些原因导致的呢?
  3. 为什么这个SQL Server DBA学习PowerShell--SQL任务
  4. netstat命令查看网络信息
  5. JavaScript 继承
  6. 教程-delphi的开源json库:superobject,用法简介
  7. css选择器([class*= icon-], [class^=icon-] 的区别)
  8. Smartmontools检测硬盘坏道
  9. 你所不知道的 CSS 滤镜技巧与细节
  10. 332.重新安排行程
  11. 小程序 做二维码带logo绘制二维码
  12. UWA学堂|逻辑代码模块
  13. Android之模仿微信登陆界面(一)
  14. java文件打包jar文件_如何把JAVA文件打包成jar文件
  15. SMS注册与接收短信
  16. 计算机毕业设计 SSMKTV点歌系统 音创ktv点歌系统 卡拉ok点歌系统Java Vue MySQL数据库 远程调试 代码讲解
  17. TIA博途V17中如何创建和使用VoT应用程序_Web功能
  18. android eclipse加密,Elliptic Curve Cryptography:在eclipse android中使用NFC发送加密消息
  19. 商业保理与 P2P 是如何结合运作的
  20. 《实用VC编程之玩转控件》第7课:ListBox 列表控件

热门文章

  1. Hi3518EV300芯片linux系统配置USB Camera功能
  2. 2018年最新python视频教程学习建议百度云分享
  3. ubuntu 刷新频率 如何查看_Ubuntu分辨率和刷新频率设置
  4. 计算机丢失系统文件如何找回,电脑引导文件丢失怎么办 引导文件丢失恢复方法...
  5. 计算机系统1 实验 LC-3 Nim游戏 子程序
  6. 云队友丨当代攒钱青年现状:没变富,先「变负」
  7. Electron 打包Mac安装包代码签名问题解决方案
  8. 用于商用微处理器的快速位收集、位分散和位置换指令(一)
  9. Linux 块设备层中的Multi-queue分析
  10. 计算机网络各层设备及功能讲解大汇总~