基于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数据库高手秘籍(六)——LitePal的修改和删除操作

在上一篇文章中,我们学会了使用LitePal进行存储数据的功能。确实,比起直接使用Android原生的API,LitePal明显简单方便了太多。那么,在增删改查四种操作中,我们已经把“增”学完了,今天...

Android数据库高手秘籍(五)——LitePal的存储操作

经过前面几篇文章的学习,我们已经把LitePal的表管理模块的功能都很好地掌握了,相信大家都已经体会到了使用LitePal来创建表、升级表、以及建立表关联所带来的便利。那么从本篇文章开始,我们将进入到...

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

android视频播放之JieCaoVideoPlayer全能播放器

项目地址:https://github.com/lipangit/JieCaoVideoPlayer/blob/develop/README-ZH.md

jiecaovideo开源项目笔记-JCVideoPlayer小修改

开源作者初衷并不想任何开发者修改JCVideoPlayer,恰巧一个群友遇到个问题 需要在点击播放按钮后,然后请求视频地址,然后播放。 这里提供修改方案(不推荐这种方案。因为更新JCVideo麻烦。尽...

Android中图形的绘制-----自定义View(利用canvas和Path相结合)

Android中绘图的方式有多种,在一些App中与可能会用到,小弟利用闲暇时间在网上找了一点资料进行研究,谨在此汇总一下,希望对用需要的同仁有所帮助。说到自定义控件相信大家都不陌生,这边文章主要介绍的...
  • w_l_s
  • w_l_s
  • 2017-02-21 17:42
  • 224

jiecaovideo开源项目笔记-JCVideoPlayer分析-小屏逻辑

这里的小屏指的是全屏切换到小屏幕 其实上篇博客小屏切换全屏看明白了,其实这个都无所谓看不看,直接切换到小屏的视频输出就好了 public static boolean backPress() { ...

视频播放---jiecaovideoplayer的使用

首先是github地址 https://github.com/lipangit/JieCaoVideoPlayer/ 下面这个是带中文说明的 https://github.com/lipangit/...

Android数据库高手秘籍(七)——体验LitePal的查询艺术

经过了多篇文章的学习,我们已经把LitePal中的绝大部分内容都掌握了。现在回想起来了,增删改查四种操作中的前三种我们都已经学完了,不知道现在使用起数据库来,你有没有感觉到格外的轻松和简单。但是呢,我...

腾讯抽奖热线电话是多少↑↗

0755_【3303一7554】(全国免费专线)騰讯官网咨询电话活动咨询:0755_【3303一7554】王经理接听地址:广东省深圳市高新科技园南区高新南一道飞亚达高科技大厦    1998年11月 ...

ColorPickerPreference颜色选择器

ColorPickerPreference是一个非常简单的颜色选择框架,相比ColorPickerView下面还有一个透明度选择栏,使得颜色的设置更加丰富,下面是一个非常简单的小列子: 首先,下载G...
  • w_l_s
  • w_l_s
  • 2016-10-11 16:25
  • 140
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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