Vitamio库打造万能播放器(三)

接着上一篇文章使用Vitamio库打造万能播放器(二)


细心的可以发现,上一篇文章中VideoPlayerActivity是继承至BaseActivity的,BaseActivity相信大家都不陌生了,每个项目都会有一个定制的基类Activity,不同的开发者所写的BaseActivity也都不也一样,但是目的都是一样的,就是:

1.规范所有Activity的代码编写;

2.将公共的方法都写在BaseActivity上,节省编码量;

3.方便阅读和维护;

这里本不是介绍BaseActivity该如何自定制的,但是为了方便阅读上一篇文章,这里还是贴出代码介绍下.


BaseActivity布局如下:

<?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=".module.main.MainActivity">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
        <!--自定义的titleBar-->
        <mchenys.net.csdn.blog.myplayer.common.widget.TitleBar
            android:id="@id/titleBar"
            android:layout_width="match_parent"
            android:layout_height="50dp"/>

        <FrameLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent">
            <!--装载子View的根容器-->
            <FrameLayout
                android:id="@id/fl_content"
                android:layout_width="match_parent"
                android:layout_height="match_parent"/>
            <!--自定义的加载圈-->
            <mchenys.net.csdn.blog.myplayer.common.widget.LoadView
                android:id="@id/loadView"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:visibility="gone"/>
        </FrameLayout>
    </LinearLayout>

</RelativeLayout>


BaseActivity代码如下:

package mchenys.net.csdn.blog.myplayer.common.base;

import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.FrameLayout;
import android.widget.ImageButton;

import mchenys.net.csdn.blog.myplayer.R;
import mchenys.net.csdn.blog.myplayer.common.interfaces.UIOperation;
import mchenys.net.csdn.blog.myplayer.common.utils.UIUtils;
import mchenys.net.csdn.blog.myplayer.common.widget.LoadView;
import mchenys.net.csdn.blog.myplayer.common.widget.TitleBar;

/**
 * Created by mChenys on 2016/1/14.
 */
public abstract class BaseActivity extends FragmentActivity implements UIOperation {

    protected LoadView mLoadView;//加载视图
    protected View mContentView;//子View的布局

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        initBase();
        initView();
        initListener();
        initData();
    }

    /**
     * 初始化基类
     */
    private void initBase() {
        setContentView(R.layout.activity_base);
        setTitleBar((TitleBar) findView(R.id.titleBar));//设置标题
        mLoadView = findView(R.id.loadView);//加载视图
        FrameLayout flContent = findView(R.id.fl_content);//子View的父布局
        if (null != getLayoutResId()) {
            mContentView = View.inflate(this,getLayoutResId(),null);
            if (null != mContentView) {
                flContent.removeAllViews();
                flContent.addView(mContentView);//添加子视图
                //给所有的Button/ImageButton添加点击事件
                findButtonSetOnClickListener(mContentView);
            }
        }
        mLoadView.setClickReLoadListener(new LoadView.LoadViewReloadListener() {
            @Override
            public void reLoad() {
                reLoadData();//重新加载数据
            }
        });

    }

    /**
     * 设置顶部标题栏
     *
     * @param titleBar
     */
    protected abstract void setTitleBar(TitleBar titleBar);

    /**
     * 给当前布局的所有button,imageButton设置点击事件
     *
     * @param view
     */
    private void findButtonSetOnClickListener(View view) {
        if (view instanceof ViewGroup) {
            ViewGroup viewGroup = (ViewGroup) view;
            int count = viewGroup.getChildCount();
            for (int i = 0; i < count; i++) {
                View child = viewGroup.getChildAt(i);
                if (child instanceof ViewGroup) {
                    findButtonSetOnClickListener(child);
                } else if (child instanceof Button || child instanceof ImageButton) {
                    child.setOnClickListener(this);
                }
            }
        }
    }

    /**
     * 自动类型转换查找控件
     *
     * @param id
     * @param <T>
     * @return
     */
    public <T> T findView(int id) {
        return (T) super.findViewById(id);
    }

    /**
     * 是否是主页面
     *
     * @return
     */
    protected abstract boolean isHomePage();

    private long exitTime;

    @Override
    public void onBackPressed() {
        if (isHomePage()) {
            if (System.currentTimeMillis() - exitTime > 2000) {
                exitTime = System.currentTimeMillis();
                showToast("再按一次退出应用");
            } else {
                android.os.Process.killProcess(android.os.Process.myPid());
            }
        } else {
            finish();
            this.overridePendingTransition(R.anim.left_in, R.anim.right_out);
        }
    }

    /**
     * 显示在屏幕中间的土司
     *
     * @param text
     */
    public void showToast(String text) {
        UIUtils.showToast(text);
    }
    /**
     * 添加Fragment到R.id.fl_content位置
     *
     * @param baseFragment
     * @param tag
     * @param bundle
     */
    protected void addFragment(BaseFragment baseFragment, String tag, Bundle bundle) {
        if (null != bundle) {
            baseFragment.setArguments(bundle);
        }
        getSupportFragmentManager().beginTransaction()
                .replace(R.id.fl_content, baseFragment, tag)
                .commitAllowingStateLoss();
    }
}


UIOperation 接口代码如下:

package mchenys.net.csdn.blog.myplayer.common.interfaces;

import android.view.View;

/**
 * Created by mChenys on 2016/1/16.
 */
public interface UIOperation extends View.OnClickListener {

    /**
     * 返回布局的资源文件id
     *
     * @return
     */
    Integer getLayoutResId();

    /**
     * 初始化View
     */
    void initView();

    /**
     * 初始化监听
     */
    void initListener();

    /**
     * 初始化数据
     */
    void initData();

    /**
     * 重新加载数据
     */
    void reLoadData();
}



你可能感兴趣的:(Vitamio库打造万能播放器(三))