热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

具体怎么使用视频播放屏幕的感重力切换横竖屏

具体怎么使用视频播放屏幕的感重

,


,






























之前 , 只是介绍了一些代码去实现视频播放的平复翻转这一功能!可以随你意进行屏幕的翻转,满足用户的需求。但是,当你真的去做一个像的时候,会有问题出现的哦!那到底是什么问题呢?待我。。娓娓道来!

是酱汁的,我在使用视频播放的时候会有点击屏幕切换的按钮来进行屏幕横竖屏的切换播放,当然我还有使用翻转屏幕通过感重力来自动的切换屏幕的横竖屏。那么,问题就出现了,点击按钮和感重力~~~会出现冲突!而冲突是这样子的:当前我将手机处于横屏(竖屏),然后此时的我想通过点击按钮来切换屏幕的方向。那么,你会遇到 我点击按钮来切换屏幕不起作用了!!!原因是,手机处于横屏的时候,此时的感重力命令是一直让手机处于横屏的,虽然你有通过点击按钮切换屏幕方向的命令。但是,感重力命令一直在执行并掩盖了按钮的命令。使的按钮的操作没什么用了。

/** OrientationSensorListener.java 类中     */
public void onSensorChanged(SensorEvent event) {
		
		float[] values = event.values;
        int orientation = ORIENTATION_UNKNOWN;
        float X = -values[_DATA_X];
        float Y = -values[_DATA_Y];
        float Z = -values[_DATA_Z];        
        float magnitude = X * X + Y * Y;
        // Don't trust the angle if the magnitude is small compared to the y value
        if (magnitude * 4 >= Z * Z) {
            float OneEightyOverPi= 57.29577957855f;
            float angle = (float)Math.atan2(-Y, X) * OneEightyOverPi;
            orientation = 90 - (int)Math.round(angle);
            // normalize to 0 - 359 range
            if (orientation >= 360) {
                orientation -= 360;
            } 
            if (orientation <0) {
                orientation += 360;
            }
        }
        
        if(isClickFullScreenButton){
        	
        	//竖屏
        	if(isLandscape && (((orientation > 315 && orientation <= 360) || (orientation >= 0 && orientation <= 45)) 
        			|| (orientation > 135 && orientation <= 225)) ){
        		
        		isLandscape = false;
        		isClickFullScreenButton = false;
        		isSennor = true;
        	} 
        	
        	//横屏
        	if(!isLandscape &&  ((orientation > 45 && orientation <= 135) || (orientation > 225 && orientation <= 315))){
        		
        		isLandscape = true;
        		isClickFullScreenButton = false;
        		isSennor = true;
        	}
      	
        }
        
        if(!isSennor){//判断是否要进行中断信息传递
			return ;
		}
        
        if (rotateHandler!=null) {
			rotateHandler.obtainMessage(888, orientation, 0).sendToTarget();
		}

	}
	
	/** 点击屏幕切换按钮的时候 同时调用该方法 : 中断Handler信息传递     */
	public  void setIsSennor(){
		
		isSennor = false;
	}
	/** 点击屏幕切换按钮的时候 同时调用该方法 : 确认此时屏幕的方向    */
	public  void setIsLandscape(boolean bool){
		
		isLandscape = bool;
	}
	/** 点击屏幕切换按钮的时候 同时调用该方法 :设置按钮是否已被点击      */
	public  void setButtonFullScreenClicked(){
		
		isClickFullScreenButton = true;
	}

那么,我们就这么来解决(思路):

感重力当被注册过之后,感重力的方法就会一直监听着并传递信息释放命令。其实就像是人体神经通过神经中枢来进行传递信息一样传递信息释放命令。那么,我们就下点药中断信息的传输并在此做点手脚就好了。

第一步:当你点击切换按钮的时候,发布信息到感重力说,此时你要中断信息的传输。

第二步:当你点击切换按钮的时候,发布信息到感重力说,我已经点击了屏幕的切换按钮。

第三步:当你点击切换按钮的时候,进行了第一步之后,还要告诉感重力说,此时屏幕所处于的状态:横屏或竖屏状态。

然后,由上面的代码来看。按照代码的读取方向讲,在onSensorChanged方法中。当用户点击按钮来切换了屏幕,而没有翻转屏幕的时候,程序读到 if(!isSennor) 的时候就会中断!感重力不起作用并完全由按钮的命令来控制屏幕翻转。而当用户翻转过来屏幕之后,程序一直进行读下去不会被中断并实现感重力的被激活。代码中当遇到 boolean变量(isClickFullScreenButton)时候继续向其方法中走读。然后会看到两个判断分别是横屏和竖屏状态,这个是按钮被点击时候的屏幕状态,假设是横屏。(此时用户翻转了屏幕)这时候就会设置状态值,因此也就激活了感重力(isSennor)使得程序会一直保持信息的传递,即是激活了感重力切换屏幕功能。

从而实现了,假设~横屏~状态下:用户通过点击按钮能够切换屏幕的竖屏状态,并一直保持下去。直到用户翻转屏幕到竖屏,并由此激活了感重力状态。由此用户又能够随意通过感重力翻转屏幕来切换横竖屏!

具体怎么使用视频播放屏幕的感重力切换横竖屏


推荐阅读
  • 一个建表一个执行crud操作建表代码importandroid.content.Context;importandroid.database.sqlite.SQLiteDat ... [详细]
  • 蒜头君的倒水问题(矩阵快速幂优化)
    蒜头君将两杯热水分别倒入两个杯子中,每杯水的初始量分别为a毫升和b毫升。为了使水冷却,蒜头君采用了一种特殊的方式,即每次将第一杯中的x%的水倒入第二杯,同时将第二杯中的y%的水倒入第一杯。这种操作会重复进行k次,最终求出两杯水中各自的水量。 ... [详细]
  • 本文介绍了Java编程语言的基础知识,包括其历史背景、主要特性以及如何安装和配置JDK。此外,还详细讲解了如何编写和运行第一个Java程序,并简要介绍了Eclipse集成开发环境的安装和使用。 ... [详细]
  • malloc 是 C 语言中的一个标准库函数,全称为 memory allocation,即动态内存分配。它用于在程序运行时申请一块指定大小的连续内存区域,并返回该区域的起始地址。当无法预先确定内存的具体位置时,可以通过 malloc 动态分配内存。 ... [详细]
  • Python多线程详解与示例
    本文介绍了Python中的多线程编程,包括僵尸进程和孤儿进程的概念,并提供了具体的代码示例。同时,详细解释了0号进程和1号进程在系统中的作用。 ... [详细]
  • NX二次开发:UFUN点收集器UF_UI_select_point_collection详解
    本文介绍了如何在NX中使用UFUN库进行点收集器的二次开发,包括必要的头文件包含、初始化和选择点集合的具体实现。 ... [详细]
  • 本文介绍了如何在 ASP.NET 中设置 Excel 单元格格式为文本,获取多个单元格区域并作为表头,以及进行单元格合并、赋值、格式设置等操作。 ... [详细]
  • 经过一年的思考,我发现自己对开发的兴趣并不浓厚,而对算法研究则更加热衷。本文将探讨开发与算法之间的本质差异,并分享我的未来学习计划。 ... [详细]
  • Cookie学习小结
    Cookie学习小结 ... [详细]
  • 包含phppdoerrorcode的词条 ... [详细]
  • MySQL初级篇——字符串、日期时间、流程控制函数的相关应用
    文章目录:1.字符串函数2.日期时间函数2.1获取日期时间2.2日期与时间戳的转换2.3获取年月日、时分秒、星期数、天数等函数2.4时间和秒钟的转换2. ... [详细]
  • 如何解决8080端口被占用问题
    本文介绍了如何通过命令行和任务管理器查找并终止占用8080端口的进程,以确保该端口能够正常使用。 ... [详细]
  • Excel 数据分析基础
    Excel 是数据分析中最基本且强大的工具之一,具备多种实用功能和操作方法。本文将简要介绍 Excel 的不同版本及其兼容性问题,并探讨在处理大数据时的替代方案。 ... [详细]
  • LDAP服务器配置与管理
    本文介绍如何通过安装和配置SSSD服务来统一管理用户账户信息,并实现其他系统的登录调用。通过图形化交互界面配置LDAP服务器,确保用户账户信息的集中管理和安全访问。 ... [详细]
  • 过去查询Mysql的时候,都见3306对所有端口开放着,感觉不安全。netstat&nbsp;-anlp&nbsp;|&nbsp;grep&nbsp;mysqltcp&nbsp;0&am ... [详细]
author-avatar
龙晓桥的微博_267
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有