节操播放器拓展之仿微信拖拽关闭视频

拖拽的逻辑一定是在onTouch中去处理了,因节操播放器需处理播放进度以及UI逻辑,所以原有父类JCVideoPlayerStandard中已重写onTouch方法。现在要做的是单独封装一个类用来拓展拖拽关闭视频功能。

贴出关键代码

    @Override
    public boolean onTouch(View v, MotionEvent event) {
        if (currentStatus == STATUS_RESETTING)
            return false;
        int id = v.getId();
        if (id == fm.jiecao.jcvideoplayer_lib.R.id.surface_container) {
            switch (event.getAction()) {
                case MotionEvent.ACTION_DOWN:
                    mDownX = event.getRawX();
                    mDownY = event.getRawY();
                    addIntoVelocity(event);
                    break;
                case MotionEvent.ACTION_MOVE:
                    addIntoVelocity(event);
                    int deltaY = (int) (event.getRawY() - mDownY);
                    //手指往上滑动
                    if (deltaY <= DRAG_GAP_PX && currentStatus != STATUS_MOVING)
                        return super.onTouchEvent(event);
                    //手指往下滑动,开始缩放
                    if (deltaY > DRAG_GAP_PX || currentStatus == STATUS_MOVING) {
                        moveView(event.getRawX(), event.getRawY());
                        return true;
                    }
                    break;
                case MotionEvent.ACTION_CANCEL:
                case MotionEvent.ACTION_UP:
                    if (event.getAction() == MotionEvent.ACTION_UP) {
                        startDismissControlViewTimer();
                        if (mChangePosition) {
                            int duration = getDuration();
                            int progress = mSeekTimePosition * 100 / (duration == 0 ? 1 : duration);
                            bottomProgressBar.setProgress(progress);
                        }
                        if (!mChangePosition && !mChangeVolume) {
                            onEvent(JCUserActionStandard.ON_CLICK_BLANK);
                            onClickUiToggle();
                        }
                    }
                    //--------------------------------------------
                    if (currentStatus != STATUS_MOVING)
                        return super.onTouchEvent(event);
                    final float mUpX = event.getRawX();
                    final float mUpY = event.getRawY();

                    float vY = computeYVelocity();//松开时必须释放VelocityTracker资源
                    if (vY >= 1200 || Math.abs(mUpY - mDownY) > screenHeight / 4) {
                        //下滑速度快,或者下滑距离超过屏幕高度的一半,就关闭
                        if (iAnimClose != null) {
                            iAnimClose.onPictureRelease();
                        }
                    } else {
                        resetReviewState(mUpX, mUpY);
                    }
                    break;
            }
        }      //设置播放进度      else if (id == fm.jiecao.jcvideoplayer_lib.R.id.progress) {
            switch (event.getAction()) {
                case MotionEvent.ACTION_DOWN:
                    cancelDismissControlViewTimer();
                    break;
                case MotionEvent.ACTION_UP:
                    startDismissControlViewTimer();
                    break;
            }
        }
        return super.onTouch(v, event);
    }

手指下滑的时候移动控件,移动过程利用ViewHelper对控件进行缩放,缩放范围自己控制。

    //移动View
    private void moveView(float movingX, float movingY) {
        if (currentShowView == null)
            return;
        currentStatus = STATUS_MOVING;
        float deltaX = movingX - mDownX;
        float deltaY = movingY - mDownY;
        float scale = 1f;
        float alphaPercent = 1f;
        if (deltaY > 0) {
            scale = 1 - Math.abs(deltaY) / screenHeight;
            alphaPercent = 1 - Math.abs(deltaY) / (screenHeight / 2);
        }

        ViewHelper.setTranslationX(currentShowView, deltaX);
        ViewHelper.setTranslationY(currentShowView, deltaY);
        scaleView(scale);
        setBackgroundColor(getBlackAlpha(alphaPercent));
    }

下滑距离超过屏幕一半,可通过接口回调在onPictureRelease中处理关闭的逻辑。

写完测试,发现拖拽过程中背景是一片黑色,尝试将activity的主题设置为半透明主题,就解决啦!

By LiYing

原文地址:https://www.cnblogs.com/widgetbox/p/10342350.html

时间: 2024-10-03 09:36:00

节操播放器拓展之仿微信拖拽关闭视频的相关文章

仿h5拖拽

在h5中有个拖拽的声明式命令,就如html属性一样,简单强大. 而在网页上拖拽的功能还是需求很大的,所以对这方面应该去仔细了解一下. 所以仿一一下它的实现.只是仿了它的复制一份到目标容器的功能.它还有很多功能. <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </h

iOS 未读消息角标 仿QQ拖拽 简单灵活 支持xib(源码)

一.效果 二.简单用法 超级简单,2行代码集成:xib可0代码集成,只需拖一个view关联LFBadge类即可 支持pod导入pod 'LFKit/LFBadge' //一般view上加角标 _badge1 = [[LFBadge alloc] init]; [_badge1 addToTabBarItem:_view1]; //BarButtonItem上加角标 _badge2 = [[LFBadge alloc] init]; [_badge2 addToBarButtonItem:self

仿微信右滑关闭Activity

SwipeBackLayout 1.AS添加依赖 compile 'me.imid.swipebacklayout.lib:library:1.0.0' eclipse 想办法下载库工程,以库工程形式导入. 2.基类Activity继承SwipeBackActivity  BaseActivity extends SwipeBackActivity 3.不需要右滑的Activity在onCreate中添加以下语句即可: getSwipeBackLayout().setEnableGesture(

Android开发仿微信下拉关闭图片11

图片会跟随手指移动,只有是下滑时才会退出查看页面,其他情况会复位,直接当做ImageView使用即可,setViewCall方法是在下滑完成后要执行的操作,上,左,右,可自行扩展 onTouchEvent 监听手指坐标,GestureDetector 监听滑动的惯性,ViewHelper设置图片位移动画 public class FriendCircleView extends android.support.v7.widget.AppCompatImageView implements Ges

DragVideo,一种在播放视频时,可以任意拖拽的方案

转载请把头部出处链接和尾部二维码一起转载,本文出自逆流的鱼yuiop:http://blog.csdn.net/hejjunlin/article/details/53638896 前言 项目已开源到我的github: https://github.com/hejunlin2013/DragVideo DragVideo A Method to Drag the Video When Playing Video 一种在播放视频时,能够拖拽的方案 为什么有这个工程 经常在爱奇艺网站上看电影,看到如

(转)开源ckplayer 网页播放器, 跨平台(html5, mobile),flv, f4v, mp4, rtmp协议. webm, ogg, m3u8 !

文章链接:http://justcoding.iteye.com/blog/2110275 CKplayer,其全称为超酷flv播放器,它是一款用于网页上播放视频的软件,支持的格式有:http协议上的flv,f4v,mp4格式,同时支持rtmp视频流格 式播放,此播放器的特点在于用户可以自己定义播放器的风格,诸如播放/暂停按钮,静音按钮,全屏按钮都是以外部图片接口形式调用,用户根据自己的需要制作 出播放器风格所需要使用的各个按钮图片然后替换掉原始风格里相应的图片就可以制作出自己的风格了,具体的各

视频播放—— H5同层播放器接入规范

H5同层播放器接入规范 x5-video-player-type 启用H5同层播放器 通过video属性"x5-video-player-type"声明启用同层H5播放器 x5-video-player-type支持的值类型:h5 示例: <video src="http://xxx.mp4" x5-video-player-type="h5"/> 注: 这个属性需要在播放前设置好,播放之后设置无效,下面的'x5-video-play

基于FFMPEG的跨平台播放器实现

一.背景介绍 FFmpeg是一款超级强大的开源多媒体编解码框架,提供了录制.转换以及流化音视频的完整解决方案,包含了libavcodec.libavformat等多个多媒体库.FFmpeg是基于linux平台下开发的,同样可以运行于android(其实也是linux,你懂得!).windows.Mac等平台. FFmpeg有多重要?列举一下我们常用的多媒体处理软件:暴风影音.QQ影音.KMP(这个牛掰啊).格式工厂……都使用了FFmpeg,可是他们都被FFmpeg刻上了耻辱柱:理由是把开源的东西

网络电影免会员播放器

特色介绍网络电影免会员播放器是一款功能强大的VIP视频免费播放器,让用户可以在多个媒体平台上免费观看VIP影片.支持爱奇艺.芒果.腾讯.等网站电影.无需解析,一键点击即可在线播放. 使用方法 打开网站后,选择一部电影,然后点播放,弹出播放器进行播放. 1.下载并运行软件,选择视频平台,选择需要观看影片.2.点击播放,软件会弹出播放器进行播放,等待软件播放即可. 支持网站后退,前进. 支持下载. QQ:19995488 Email:[email protected] 下载地址:http://pan