基于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;
    }

}

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

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

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

视频播放---jiecaovideoplayer的使用

首先是github地址 https://github.com/lipangit/JieCaoVideoPlayer/ 下面这个是带中文说明的 https://github.com/lipangit/...
  • u012216899
  • u012216899
  • 2017年02月26日 00:14
  • 7580

Android 节操视频播放器jiecaovideoplayer使用

效果图: 主要特点: 全屏时启动新Activity实现播放器真正的全屏功能能在ListView、ViewPager和ListView、ViewPager和Fragment等多重嵌套模式下全屏工作...
  • qq_23477421
  • qq_23477421
  • 2016年07月04日 17:58
  • 22308

Android 列表播放视频和浮动播放窗口

最近接到个需求: 列表中播放视频 当视频正在播放中 用户将播放的该item滚动出屏幕时 在屏幕右下方出现一个小的浮动视频窗口继续播放视频 当用户将视频再滚动回播放的item时 再切换到该item 继续...
  • qq2653203
  • qq2653203
  • 2016年05月27日 07:26
  • 2383

三行代码实现Android彷腾讯视频播放界面的登陆框悬浮(吸附)在视频的底部

实现这样的效果我们用两个登陆框的布局来搞定,一个在布局中实际的位置 一个则先悬浮在顶部,然后当我们滑动的时候动态的来改变浮在上面的登陆框的位置 当滑动到在布局中实际位置的时候让悬浮在顶部也就是视频的底...
  • xielinhua88
  • xielinhua88
  • 2016年05月02日 00:53
  • 1453

仿今日头条视频播放JieCaoVideoPlayer

JieCaoVideoPlayer一个真正实现Android的全屏功能,立志成为Android平台使用最广泛的视频播放控件 GitHub地址:https://github.com/wlsh/JieCa...
  • w_l_s
  • w_l_s
  • 2016年11月11日 19:53
  • 8514

Android中节操播放器JieCaoVideoPlayer使用

转载地址:https://github.com/lipangit/JiaoZiVideoPlayer 参考视频:http://ke.atguigu.com/course/149/learn#less...
  • zhaihaohao1
  • zhaihaohao1
  • 2017年09月19日 14:35
  • 5489

Android 播放视频时,小窗口随意拖动

前几天还一直和产品交流看到一个视频随意拖拽的视频窗口。今天刚好看到一个博客就是这个简直nice 。不多说了直接上图 大概的思路:1、播放视频的view选择TextureView 2、ListVi...
  • u012162503
  • u012162503
  • 2016年12月20日 15:15
  • 1720

Android笔记#利用第三方播放器vitamio实现悬浮播放效果

最近面试,面试官问了我关于以前做过的项目的问题,我居然可耻的忘记了,因此有必要重新梳理一下。 达成这个目标大概分为三个步骤:1.创建一个悬浮窗口;2.将vitamio的videovi...
  • bfboys
  • bfboys
  • 2016年12月30日 22:49
  • 698

使用webview播放视频,全屏状态下适应横屏播放

最近在做播放视频的功能,选择在webview中加载视频,视频可以全屏播放,但是当设备横放时,播放内容不能随着设备的旋转而转成横屏的全屏播放模式。需要的效果是:应用其他页面只能是竖屏模式,当全屏播放视频...
  • shly1988
  • shly1988
  • 2015年07月06日 17:06
  • 1269

Android开发之使用VideoView实现视频的横屏播放、去除边框

做项目需要播放一个引导视频,本以为很简单,结果动手时发现总有瑕疵,幸好有度娘,现把收获总结如下: 一、实现视频播放: 注明我这里要播放的是Android项目中的资源文件,而不是访问SD卡播放视频。...
  • u011240877
  • u011240877
  • 2015年05月09日 14:14
  • 8323
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:基于jiecaovideo实现类似腾讯新闻视频item不可见小屏播放,item可见时小屏切换到itemy
举报原因:
原因补充:

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