首页 > 编程知识 正文

Android实现视频播放,Android播放网络视频

时间:2023-05-04 14:22:12 阅读:211931 作者:2598

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; } @Override public 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; @Override protected 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); } @Override public void showFlash(String url) { GlideUtil.Companion.showImage(LaunchActivity.this, mSplashRoot, url, new GlideUtil.Companion.ImageListener() { @Override public void onFailed() { } @Override public 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); } @Override public void getImage() { }}

LaunchPresenter 类实现LaunchContract.LaunchPresenter接口

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

4 开发环境 Java1.8KotlinAndroid 28Android build tools 28.0.3Android Studio 3.5Gradle plugin tool version 3.1.0Gradle 4.10.1 5 主要三方库 // a router api "com.alibaba:arouter-api:${rootProject.ext.arouter_api_v}" kapt "com.alibaba:arouter-compiler:${rootProject.ext.arouter_compile_v}" // fast json api "com.alibaba:fastjson:${rootProject.ext.fast_json_v}" // retrofit api "com.squareup.retrofit2:retrofit:${rootProject.ext.retrofit_v}" api "com.squareup.retrofit2:converter-gson:${rootProject.ext.retrofit_v}" // butter knife api "com.jakewharton:butterknife:${rootProject.ext.butter_knife_v}" kapt "com.jakewharton:butterknife-compiler:${rootProject.ext.butter_knife_v}" // leak canary debugApi "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}" // rxjava api "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 bus api "org.simple:androideventbus:${rootProject.ext.android_event_bus_v}" // event bus api "org.greenrobot:eventbus:${rootProject.ext.eventbus_v}" //glide api("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)

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

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

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。