`
HEI_夜猫子
  • 浏览: 829 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

推荐:视频娱乐应用源码

阅读更多

视频娱乐应用源码


介绍:
一个视频类娱乐类应用,4.4下有些bug。 本项目中使用到 Recyclerview 、Toolbar、
TabLayout、SwipeRefreshLayout、NavigationView、CoordinatorLayout、CardView等技术知识
,一个挺不错的开源项目,欢迎朋友下载学习。
项目来自:http://www.itlanbao.com/code/20151209/10000/100684.html

本项目主要依赖vitamio播放视频,vitamio也是一个不错的开源库,支持多种格式的视频播放。
如果学习视频建议使用vitamio。功能挺强大的。

 

效果截图:

 

主要播放视频部分代码如下:

package org.sunger.net.ui.activity;

import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.support.design.widget.CollapsingToolbarLayout;
import android.support.design.widget.CoordinatorLayout;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.WindowManager;

import org.sunger.net.entity.CommentEntity;
import org.sunger.net.entity.MediaEntity;
import org.sunger.net.presenter.PlayVideoPresenter;
import org.sunger.net.presenter.impl.PlayVideoPresenterImpl;
import org.sunger.net.support.recyclerview.OnRecycleViewScrollListener;
import org.sunger.net.support.recyclerview.TopScrollListener;
import org.sunger.net.ui.adapter.CommentsAdapter;
import org.sunger.net.utils.DensityUtil;
import org.sunger.net.utils.DeviceUtils;
import org.sunger.net.view.PlayVideoView;

import java.util.List;

import io.vov.vitamio.LibsChecker;
import sunger.org.demo.R;

public class VideoPlayActivity extends BaseCompatActivity implements PlayVideoView, SwipeRefreshLayout.OnRefreshListener, CommentsAdapter.OnCommentItemClickListener {
    public final static String MEDIAS_ID_KEY = "media_id";
    private RecyclerView mRecyclerView;
    private CommentsAdapter mAdapter;
    private PlayVideoPresenter mPresenter;
    private VideoPlayHeader mVideoPlayHeader;
    private int medias_id;
    private int current_comment_page = 1;

    public static Intent createIntent(Context context, int id) {
        Intent intent = new Intent(context, VideoPlayActivity.class);
        intent.putExtra(MEDIAS_ID_KEY, id);
        return intent;
    }


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (!LibsChecker.checkVitamioLibs(this))
            return;
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
        setContentView(R.layout.activity_video_play);
        View view = findView(R.id.appbar);
        int width = DeviceUtils.getScreenWidth(this) + DensityUtil.dip2px(this, 110) + getActionBarSize();
        CoordinatorLayout.LayoutParams params = new CoordinatorLayout.LayoutParams(CoordinatorLayout.LayoutParams.MATCH_PARENT, width);
        view.setLayoutParams(params);
        medias_id = getIntent().getIntExtra(MEDIAS_ID_KEY, -1);
        mPresenter = new PlayVideoPresenterImpl(this);
        mPresenter.getMedia(medias_id);
        initView();
        mPresenter.refresh(medias_id);
    }

    private void initView() {
        setUpCommonBackTooblBar(R.id.tool_bar, " ");
        CollapsingToolbarLayout collapsing_toolbar = (CollapsingToolbarLayout) findViewById(R.id.collapsing_toolbar);
        collapsing_toolbar.setTitle(" ");
        collapsing_toolbar.setExpandedTitleColor(Color.TRANSPARENT);
        mVideoPlayHeader = new VideoPlayHeader(this, findViewById(R.id.video_header));
        initRecyclerView();

    }

    private void initRecyclerView() {
        mRecyclerView = (RecyclerView) findViewById(R.id.recycler_view);
        mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
        mAdapter = new CommentsAdapter(this);
        mAdapter.setHasMoreData(true);
        mRecyclerView.addOnScrollListener(new OnRecycleViewScrollListener() {
            @Override
            public void onLoadMore() {
                mAdapter.setHasFooter(true);
                mPresenter.loadMore(medias_id, current_comment_page);
                mRecyclerView.scrollToPosition(mAdapter.getItemCount() - 1);
            }
        });
        mRecyclerView.setAdapter(mAdapter);
        mAdapter.setOnCommentItemClickListener(this);
        mRecyclerView.addOnScrollListener(new TopScrollListener() {
            protected void start() {
                mVideoPlayHeader.getVideoControllerView().start();
            }

            protected void pause() {
                mVideoPlayHeader.getVideoControllerView().pause();
            }

        });
    }


    private void setHeaderView(MediaEntity mediaEntity) {
        mVideoPlayHeader.bindData(mediaEntity);
    }

    @Override
    public void refreshComment(List<CommentEntity> dataList) {
        current_comment_page = 2;
        mAdapter.clear();
        mAdapter.appendToList(dataList);
        if (dataList.isEmpty()) {
            mAdapter.setHasMoreData(false);
        }
        mAdapter.notifyDataSetChanged();
    }

    @Override
    public void showMoreComments(List<CommentEntity> dataList) {
        if (dataList.isEmpty()) {
            mAdapter.setHasMoreData(false);
            showMsgInBottom(R.string.msg_no_more_data);
        } else {
            current_comment_page++;
            mAdapter.appendToList(dataList);
            mAdapter.notifyDataSetChanged();
            mAdapter.setHasMoreData(true);
        }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (mVideoPlayHeader != null)
            mVideoPlayHeader.getVideoControllerView().release();
    }

    @Override
    public void showMediaData(MediaEntity mediaEntity) {
        setHeaderView(mediaEntity);
    }

    @Override
    public void showLoadMediaError() {

    }

    @Override
    public void onRefresh() {
        mPresenter.refresh(medias_id);
    }


    @Override
    public void onItemClick(CommentEntity commentEntity) {
        //        Dialog dialog = UiHelper.createListDialog(this, data, new CommentOnClickListener(position));
//        dialog.show();
    }

    @Override
    public void onClickAvatar(int uid) {
    }

    @Override
    public void onClickAtFriend(String screen_name) {

    }

    @Override
    public void thumbUp(int id) {
        mPresenter.createLikeComment(id);
    }

    @Override
    public void thumbDown(int id) {
        mPresenter.destoryLikeComment(id);
    }

//    /**
//     * 点击回复弹出
//     */
//    private class CommentOnClickListener implements DialogInterface.OnClickListener {
//        private int position;
//
//        public CommentOnClickListener(int position) {
//            this.position = position - 1;
//        }
//
//        @Override
//        public void onClick(DialogInterface dialog, int which) {
//            switch (which) {
//                case 0:
//                    break;
//                case 1:
//                    ClipboardUtils.copy(VideoPlayActivity.this, commentsAdapter.getItem(position).getContent());
//                    dialog.dismiss();
//                    showMsgInBottom("已复制到剪切板");
//                    break;
//                case 2:
//                    startActivity(WebViewActivity.createIntent(VideoPlayActivity.this, "http://www.baidu.com"));
//                    break;
//                case 3:
//                    dialog.dismiss();
//                    break;
//            }
//        }
//
//    }
}

 

0
0
分享到:
评论

相关推荐

    安卓直播视频播放流媒体IPCameraRTSPDLNA相关-一个视频娱乐应用源码.zip

    一个视频娱乐应用源码.zip,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。

    【清爽娱乐网源码 v5.69】图片文字视频音频类型的网站建设+功能和模板可通过插件形式扩展

    清爽娱乐网系统可应用于图片、文字、视频、音频类型的网站建设,承载数据量大,承载访问量大,安全性高,功能和模板可通过插件形式扩展。 1、自动化程度高: 自动设置文章第一张图片为缩略图 自动检测首次安装环境 ...

    清爽娱乐网源码v4.63

    清爽娱乐网系统可应用于图片、文字、视频、音频类型的网站建设,承载数据量大,承载访问量大,安全性高,功能和模板可通过插件形式扩展。 程序特点: 1、自动化程度高: 自动设置文章第一张图片为缩略图 自动...

    清爽娱乐网源码 v4.73

    清爽娱乐网系统可应用于图片、文字、视频、音频类型的网站建设,承载数据量大,承载访问量大,安全性高,功能和模板可通过插件形式扩展。程序特点:1、自动化程度高:自动设置文章第一张图片为缩略图自动检测首次...

    【小程序源码】AI换脸小程序-可用于流量主

    该源码提供了一个简洁而直观的用户界面,用户可以上传照片、选择目标面部并应用换脸效果。 适用人群: AI换脸小程序源码适用于广大用户,无论是个人用户还是企业用户。对于那些喜欢尝试有趣特效的个人用户来说,该...

    计算机毕业设计:基于微信小程序的找电影视频应用(源码+说明+截图),保证可靠运行,附赠计算机答辩PPT模板

    该资源包内含完整的源码、详尽的说明文档以及实际运行截图,旨在帮助学习者轻松掌握找电影视频应用的开发技巧,为他们的学习和实践提供有力支持。 在源码方面,该程序充分利用了微信小程序的便捷性和高效性,实现了...

    java源码包---java 源码 大量 实例

    内容索引:JAVA源码,游戏娱乐,JAVA游戏源码  JAVA编写的吃豆子游戏,类似疯狂坦克一样,至少界面有点像。大家可以看截图。 Java从网络取得文件 1个目标文件 简单 Java从压缩包中提取文件 1个目标文件 简单 Java...

    Android 简单视频类娱乐类应用

    Android 简单视频类娱乐类应用本项目中使用到 Recyclerview 、Toolbar、 TabLayout、SwipeRefreshLayout、NavigationView、CoordinatorLayout、CardView等技术知识 ,主要依赖vitamio播放视频,vitamio也是一个不错...

    JAVA上百实例源码以及开源项目源代码

    内容索引:JAVA源码,游戏娱乐,JAVA游戏源码  JAVA编写的吃豆子游戏,类似疯狂坦克一样,至少界面有点像。大家可以看截图。 Java从网络取得文件 1个目标文件 简单 Java从压缩包中提取文件 1个目标文件 简单 Java...

    清爽娱乐网源码

    清爽娱乐网系统可应用于图片、文字、视频、音频类型的网站建设,承载数据量大,承载访问量大,安全性高,功能和模板可通过插件形式扩展。

    java源码包2

    内容索引:JAVA源码,游戏娱乐,JAVA游戏源码  JAVA编写的吃豆子游戏,类似疯狂坦克一样,至少界面有点像。大家可以看截图。 Java从网络取得文件 1个目标文件 简单 Java从压缩包中提取文件 1个目标文件 简单 ...

    清爽娱乐网源码 v5.49

    为您提供清爽娱乐网源码下载,清爽娱乐网系统可应用于图片、文字、视频、音频类型的网站建设,承载数据量大,承载访问量大,安全性高,功能和模板可通过插件形式扩展。清爽娱乐网源码程序特点:1、自动化程度高:...

    仿抖音滑动小短剧影视带支付收益等模式的微信小程序源码

    这个小程序是一款仿抖音的短视频应用。用户可以通过滑动页面观看各种短视频,包括小短剧、影视等精彩内容,并可以点赞、评论和分享视频。同时,该小程序还支持支付收益功能,有利于吸引更多的优质视频创作者加入平台...

    Python基于协同过滤算法的电影推荐视频网站源码

    Python基于协同过滤算法的电影推荐视频网站设计 开发软件:Pycharm 开发环境: Python3.6 数据库:mysql5.6 本系统包含电影前端展示界面、电影评分板块、推荐算法的实现以及后端数据库的设 计.其中实现推荐算法是...

    java源码包3

    内容索引:JAVA源码,游戏娱乐,JAVA游戏源码  JAVA编写的吃豆子游戏,类似疯狂坦克一样,至少界面有点像。大家可以看截图。 Java从网络取得文件 1个目标文件 简单 Java从压缩包中提取文件 1个目标文件 简单 ...

    java源码包4

    内容索引:JAVA源码,游戏娱乐,JAVA游戏源码  JAVA编写的吃豆子游戏,类似疯狂坦克一样,至少界面有点像。大家可以看截图。 Java从网络取得文件 1个目标文件 简单 Java从压缩包中提取文件 1个目标文件 简单 ...

    JAVA上百实例源码以及开源项目

    内容索引:JAVA源码,游戏娱乐,JAVA游戏源码  JAVA编写的吃豆子游戏,类似疯狂坦克一样,至少界面有点像。大家可以看截图。 Java从网络取得文件 1个目标文件 简单 Java从压缩包中提取文件 1个目标文件 简单 Java...

    DiscuzX3.2酷播视频插件 v3.5.rar

    DiscuzX3.2酷播视频插件简介 DiscuzX3.2酷播视频插件 / DiscuzX1.5视频插件支持多终端跨平台观看。 1. 添加极酷阳光V3.5免费版跨平台播放器到dz论坛程序中的视频应用插件 ...同类推荐:站长常用源码

    YY网页直播系统源码

    现已广泛应用于教育、娱乐、客服等各个行业,随着国内带宽的提升和各类新技术的加入,视频直播技术已经逐渐成为下一代互联网的主流,多媒体在线直播体验势必将会涵盖各类终端,成为全民参与的新一代互联网主旋律。...

Global site tag (gtag.js) - Google Analytics