wolfoxkao 2015-12-09
视频娱乐应用源码
介绍:
一个视频类娱乐类应用,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; // } // } // // } }