屏幕旋转计算,有什么好的方案?

希望通过计算屏幕旋转角度来完成:

从视频详情页旋转手机完成全屏播放。

在全屏播放旋转手机退出到视频详情页。

HarmonyOS
2024-05-26 14:12:57
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
xuqing_2000

使用的核心API

sensor.on()

核心代码解释

import sensor from '@ohos.sensor'; 
import base from '@ohos.base'; 
 
export function onDegree(callback: base.Callback<string>): void { 
  sensor.on(sensor.SensorId.GRAVITY, (data: sensor.GravityResponse) => { 
    let degree: number = -1; 
    let rotation: string = 'INVALID'; 
    degree = CalDegree(data.x, data.y, data.z) 
    console.log(degree + "  zzz") 
    if (degree >= 0 && (degree <= 30 || degree >= 330)) { 
      rotation = "ROTATION_0"; 
    } else if (degree >= 60 && degree <= 120) { // Use ROTATION_90 when degree range is [60, 120] 
      rotation = "ROTATION_90"; 
    } else if (degree >= 150 && degree <= 210) { // Use ROTATION_180 when degree range is [150, 210] 
      rotation = "ROTATION_180"; 
    } else if (degree >= 240 && degree <= 300) { // Use ROTATION_270 when degree range is [240, 300] 
      rotation = "ROTATION_270"; 
    } 
    callback(rotation); 
  }); 
} 
 
function CalDegree(x: number, y: number, z: number): number { 
  let degree: number = -1; 
  // 3 为 有效_增量_角度_阈值_系数 
  if ((x * x + y * y) * 3 < z * z) { 
    return degree; 
  } 
  degree = 90 - (Number)(Math.round(Math.atan2(y, -x) / Math.PI * 180)); 
  return degree >= 0 ? degree % 360 : degree % 360 + 360; 
}

实现效果

使用ArkTS语言可以完成对C++能力的复现。

注明适配的版本信息

IDE版本:4.1.3.500

SDK版本:OpenHarmony 4..5.6

分享
微博
QQ
微信
回复
2024-05-27 17:34:18
相关问题
连接网络信息获取方案吗?
277浏览 • 1回复 待解决
Text模拟隐私协议,方案吗?
373浏览 • 1回复 待解决
Scrollerfling实现有什么方案
370浏览 • 1回复 待解决
har和hsp转换,方案吗?
243浏览 • 1回复 待解决
如何实现应用屏幕自动旋转
696浏览 • 1回复 待解决
请问现在harmonyOS屏幕适配方案吗?
2281浏览 • 1回复 待解决
taskpool使用 ,谁有方案
199浏览 • 1回复 待解决
禁用屏幕旋转问题有知道吗?
1266浏览 • 1回复 待解决
SM4 CBC模式加解密,方案吗?
448浏览 • 1回复 待解决
页面截图功能,什么方法?
355浏览 • 1回复 待解决
转场动画,谁有方案吗?
139浏览 • 1回复 待解决
Listitem点击变色什么方法吗
576浏览 • 1回复 待解决
有谁知道如何监听屏幕旋转
652浏览 • 1回复 待解决
本地收发消息实践,谁有方案
231浏览 • 1回复 待解决
Image图片加载缓慢,什么方案么?
330浏览 • 1回复 待解决