zoukankan      html  css  js  c++  java
  • 一款使用RxJava+Retrofit+MVP的快播App开源啦!

    《快播》,仿网易云音乐UI,整体采用RxJava+Retrofit+MVP的架构,支持在线视频播放,在线图片浏览等功能。

    用到第三方开源库:

    • ButterKnife:依赖注入框架
    • glide:图片加载
    • retrofit:网络请求
    • jieCaoVideoPlayer:播放器

    抓取接口用于数据展示

    效果图如下:






    基类:

    package com.zmj.qvod.base;
    
    import android.content.Context;
    import android.content.Intent;
    import android.content.pm.ActivityInfo;
    import android.os.Build;
    import android.os.Bundle;
    import android.support.v7.app.AppCompatActivity;
    import android.util.Log;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.Window;
    import android.view.WindowManager;
    import android.widget.Toast;
    
    public abstract class BaseActivity extends AppCompatActivity {
    
    
        /**
         * 是否沉浸状态栏
         **/
        private boolean isSetStatusBar = false;
        /**
         * 是否允许全屏
         **/
        private boolean mAllowFullScreen = false;
        /**
         * 是否允许屏幕旋转
         **/
        private boolean isAllowScreenRotate = false;
        /**
         * 当前Activity渲染的视图View
         **/
        private View mContextView = null;
        /**
         * 日志输出标志
         **/
        protected final String TAG = this.getClass().getSimpleName();
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            Log.d(TAG, "BaseActivity-->onCreate()");
            Bundle bundle = getIntent().getExtras();
            initPrams(bundle);
            //
            mContextView = LayoutInflater.from(this).inflate(bindLayout(), null);
            //
            if (mAllowFullScreen) {
                requestWindowFeature(Window.FEATURE_NO_TITLE);
            }
            //
            if (isSetStatusBar) {
                steepStatusBar();
            }
            //
            setContentView(bindLayout());
            //
            if (!isAllowScreenRotate) {
                setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
            }
            //
            initView(mContextView);
            //
            setListener();
            //
            doBusiness(this);
        }
    
        /**
         * [沉浸状态栏]
         */
        private void steepStatusBar() {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
                // 透明状态栏
                getWindow().addFlags(
                        WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
                // 透明导航栏
                getWindow().addFlags(
                        WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
            }
    
        }
    
        /**
         * [初始化参数--加载xml视图之前]
         *
         * @param bundle
         */
        public abstract void initPrams(Bundle bundle);
    
        /**
         * [绑定布局]
         *
         * @return
         */
        public abstract int bindLayout();
    
        /**
         * [初始化控件]
         *
         * @param view
         */
        public abstract void initView(final View view);
    
        /**
         * [绑定控件]
         *
         * @param resId
         * @return
         */
        protected <T extends View> T $(int resId) {
            return (T) super.findViewById(resId);
        }
    
        /**
         * [设置监听]
         */
        public abstract void setListener();
    
        /**
         * [业务操作]
         *
         * @param mContext
         */
        public abstract void doBusiness(Context mContext);
    
    
        /**
         * [页面跳转]
         *
         * @param clz
         */
        public void startActivity(Class<?> clz) {
            startActivity(new Intent(BaseActivity.this, clz));
        }
    
        /**
         * [携带数据的页面跳转]
         *
         * @param clz
         * @param bundle
         */
        public void startActivity(Class<?> clz, Bundle bundle) {
            Intent intent = new Intent();
            intent.setClass(this, clz);
            if (bundle != null) {
                intent.putExtras(bundle);
            }
            startActivity(intent);
        }
    
        /**
         * [含有Bundle通过Class打开编辑界面]
         *
         * @param cls
         * @param bundle
         * @param requestCode
         */
        public void startActivityForResult(Class<?> cls, Bundle bundle,
                                           int requestCode) {
            Intent intent = new Intent();
            intent.setClass(this, cls);
            if (bundle != null) {
                intent.putExtras(bundle);
            }
            startActivityForResult(intent, requestCode);
        }
    
        @Override
        protected void onRestart() {
            super.onRestart();
            Log.d(TAG, "onRestart()");
        }
    
        @Override
        protected void onStart() {
            super.onStart();
            Log.d(TAG, "onStart()");
        }
    
        @Override
        protected void onResume() {
            super.onResume();
            Log.d(TAG, "onResume()");
        }
    
        @Override
        protected void onPause() {
            super.onPause();
            Log.d(TAG, "onPause()");
        }
    
        @Override
        protected void onStop() {
            super.onStop();
            Log.d(TAG, "onStop()");
        }
    
        @Override
        protected void onDestroy() {
            super.onDestroy();
            Log.d(TAG, "onDestroy()");
        }
    
        /**
         * [简化Toast]
         *
         * @param msg
         */
        protected void showToast(String msg) {
            Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();
        }
    
        /**
         * [简化Toast]
         *
         * @param msg
         */
        protected void showToast(int msg) {
            Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();
        }
    
        /**
         * [是否允许全屏]
         *
         * @param allowFullScreen
         */
        public void setAllowFullScreen(boolean allowFullScreen) {
            this.mAllowFullScreen = allowFullScreen;
        }
    
        /**
         * [是否设置沉浸状态栏]
         *
         * @param isSetStatusBar
         */
        public void setSteepStatusBar(boolean isSetStatusBar) {
            this.isSetStatusBar = isSetStatusBar;
        }
    
        /**
         * [是否允许屏幕旋转]
         *
         * @param isAllowScreenRotate
         */
        public void setScreenRoate(boolean isAllowScreenRotate) {
            this.isAllowScreenRotate = isAllowScreenRotate;
        }
    
    }
    

    作者:zhaomingjian;Github开源地址:https://github.com/zhao-mingjian/qvod

    欢迎关注我的微信公众号「码农突围」,分享Python、Java、大数据、机器学习、人工智能等技术,关注码农技术提升•职场突围•思维跃迁,20万+码农成长充电第一站,陪有梦想的你一起成长。

  • 相关阅读:
    [Practical Git] Clean up commits with git rebase
    [Practical Git] Show who changed a line last with git blame
    [Practical Git] Compare file changes with git diff
    [Practical Git] Filter commit history with git log arguments
    [Practical Git] Format commit history with git log arguments
    [Practical Git] Navigate git command pager output with Unix less commands
    [Practical Git] Switching between current branch and last checkout branch
    [ES6] ES6 Parameter Object Destructuring with Required Values
    [React] Higher Order Components (replaces Mixins)
    HDU 1242 Rescue (BFS(广度优先搜索))
  • 原文地址:https://www.cnblogs.com/hejunlin/p/12722130.html
Copyright © 2011-2022 走看看