基于jiecaovideo实现类似腾讯新闻视频item不可见小屏播放,item可见时小屏切换到itemy

原创 2016年08月30日 20:24:23

先上个效果图,基于开源项目jiecaovideo修改,类似于腾讯新闻效果

此特效View为JCVideoPlayerListAutoWindowTiny继承自JCVideoPlayerStandard

Item滑出屏幕后自动小屏播放,Item再次滑入屏幕,则小屏切回Item播放


用法示例

使用JCVideoPlayerListAutoWindowTiny的调用代码

 Object[] youData = {"标题", position + ""};
 jCVideoPlayerListAutoWindowTiny.setUp( "url", JCVideoPlayer.SCREEN_LAYOUT_LIST,youData);

在你使用JCVideoPlayerListAutoWindowTiny的Activity中,其实就是把JCVideoPlayer更换为JCVideoPlayerListAutoWindowTiny
 @Override
    public void onBackPressed() {
        if (JCVideoPlayerListAutoWindowTiny.backPress()) {
            return;
        }
        super.onBackPressed();
    }

源码部分

package fm.jiecao.jcvideoplayer_lib;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.text.TextUtils;
import android.util.AttributeSet;
import android.util.Log;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.ScrollView;
import android.widget.SeekBar;
import android.widget.TextView;
import android.widget.Toast;

import java.util.Timer;
import java.util.TimerTask;

/**
 * Created by yujunkui
 * On 2016/08/30
 */
public class JCVideoPlayerListAutoWindowTiny extends JCVideoPlayerStandard {


    public String position="-1";//记录播放的position

    public JCVideoPlayerListAutoWindowTiny(Context context) {
        super(context);
    }

    public JCVideoPlayerListAutoWindowTiny(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    public void init(Context context) {
        super.init(context);
    }

    @Override
    public   boolean setUp(String url, int screen, Object... objects) {
        Log.i(TAG, "setUp [" + this.hashCode() + "]isCurrentMediaListener()=" + isCurrentMediaListener() + " this.currentState == CURRENT_STATE_PLAYING=" + (this.currentState == CURRENT_STATE_PLAYING) + " screen!=SCREEN_WINDOW_FULLSCREEN" + (screen != SCREEN_WINDOW_FULLSCREEN));
        JCVideoPlayerListAutoWindowTiny jcVideoPlayer = null;
        boolean isPlayingTiny=false;//当前是否在播放
        if (JCVideoPlayerManager.listener() != null) {
            jcVideoPlayer = (JCVideoPlayerListAutoWindowTiny) JCVideoPlayerManager.listener();
            isPlayingTiny=jcVideoPlayer.currentScreen==SCREEN_WINDOW_TINY?true:false;
//            Log.i(TAG, "setUp [" + this.hashCode() + "] jcVideoPlayer.objects[1]="+jcVideoPlayer.objects[1]);
        }
        if (isCurrentMediaListener() //当前播放监听是否是自己
                && this.currentState == CURRENT_STATE_PLAYING //正在播放
                && screen != SCREEN_WINDOW_FULLSCREEN //是否在全屏
                && !isFullSwitchList//是否全屏切到listview
                &&!isPlayingTiny) {//在播放
            //启动小屏
            startWindowTiny();
        } else if (jcVideoPlayer != null
                && objects.length>1
//                && jcVideoPlayer.objects[1] != null && objects[1] != null
                && position.equals(objects[1])//position是否一致
                && jcVideoPlayer.currentState == CURRENT_STATE_PLAYING//是否在播放
                && jcVideoPlayer.currentScreen == SCREEN_WINDOW_TINY) {//是否小屏
            Log.i(TAG, "setUp Tiny To List [" + this.hashCode() + "] position="+position+" objects[1]="+objects[1]);
            JCVideoPlayerManager.listener().goToOtherListener();//返回到item播放
        } else {
            isFullSwitchList = false;
        }
        boolean superReturn = super.setUp(url, screen, objects);
        if (currentScreen == SCREEN_WINDOW_TINY) {
            tinyBackImageView.setVisibility(View.INVISIBLE);//设置在小屏下隐藏back
        }
        return superReturn;
    }

    public boolean isFullSwitchList = false;//是否从全屏切换到小屏

    @Override
    public void onClick(View v) {
        super.onClick(v);
        int i = v.getId();
        if (i == R.id.surface_container && currentScreen == SCREEN_WINDOW_TINY) {
            //回调小屏下小屏被点击事件
            Toast.makeText(getContext(),"小屏被点击",Toast.LENGTH_SHORT).show();
        } else if (i == R.id.fullscreen) {
            if (currentScreen != SCREEN_WINDOW_FULLSCREEN) {
                isFullSwitchList = true;//全屏时候做个标识  以便在setup的时候不会切换成小屏
            }
        }else if (i == R.id.thumb||i==R.id.start) {
            position=objects[1].toString();
        }
    }

    public static boolean backPress() {//这个方法如果你没看过源码 基本可能看不懂
        Log.i(TAG, "backPress");
        if (JCVideoPlayerManager.listener() != null) {
            JCVideoPlayerListAutoWindowTiny jcVideoPlayer = (JCVideoPlayerListAutoWindowTiny) JCVideoPlayerManager.listener();
            if (jcVideoPlayer.currentScreen != SCREEN_WINDOW_TINY) {
                if (jcVideoPlayer.currentScreen == SCREEN_WINDOW_FULLSCREEN) {//如果当前是全屏则在切换完后对小屏的isFullSwitchList进行操作
                    boolean b = JCVideoPlayerManager.listener().goToOtherListener();
                    JCVideoPlayerListAutoWindowTiny currentJcVideoPlayer = (JCVideoPlayerListAutoWindowTiny) JCVideoPlayerManager.listener();
                    currentJcVideoPlayer.isFullSwitchList = true;//back标识
                    return b;
                }
                return JCVideoPlayerManager.listener().goToOtherListener();
            }
        }
        return false;
    }

}

放到自己项目直接用即可。注释应该可以看明白

注:这个实现没有详细测试。仅作为参考或者实现思路使用。

版权声明:本文为博主原创文章,可以随意转载

相关文章推荐

Android仿微博实现列表滑动播放/暂停视频

本文仿照新浪微博/QQ空间实现了滑动自动播放视频的功能。 本文来自个人博客:http://www.zhangliwei.date 如有疑问欢迎讨论,感谢您的关注。 先上效果图 关...

JieCaoVideoPlayer 使用的坑

JieCaoVideoPlayer 作为开源的视频播放项目,使用热度非常之高,目前已有三千四百多的star,下面是它的地址 https://github.com/lipangit/JieCaoVid...

017年Android百大框架排行榜

一.榜单介绍   排行榜包括四大类: 单一框架:仅提供路由、网络层、UI层、通信层或其他单一功能的框架 混合开发框架:提供开发hybrid app、h5与webview结合能力、web app...

android 图片缩放后划屏拖动图片与Viewpager切换Item冲突(拖动图片的事件相应被屏蔽)问题解决

在上一篇文章《android 手势触发图片缩放拖动(包含缩放图片时图片的大小判断以及拖动图片时图片的边界判断)》最后提出了一个注意点:当自定义的MatrixImageView如ViewPager、Li...

iOS 类似扣扣微信中腾讯新闻的新闻列表实现

由于项目近期添加新闻列表,就是类似扣扣和微信中的腾讯新闻的那种列表,所以就自己琢磨着实现了一下,1、首先注意到,扣扣的新闻列表和普通的看起来并没有什么不同,但是在刷新数据的时候,细心的同学就会发现,它...

RecyclerView实现加载多种条目类型,仿新闻列表多种item布局.

本技术博客来自 http://blog.csdn.net/qq_35353487 今天咱们是用RecyclerView来实现这个多种Item的加载. 其实最关键的是要复写RecyclerView的...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:基于jiecaovideo实现类似腾讯新闻视频item不可见小屏播放,item可见时小屏切换到itemy
举报原因:
原因补充:

(最多只允许输入30个字)