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

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

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

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

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

使用的核心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
相关问题
监听屏幕旋转案例哪些
325浏览 • 1回复 待解决
屏幕自动旋转示例哪些?
336浏览 • 1回复 待解决
Scrollerfling实现有什么方案
698浏览 • 1回复 待解决
连接网络信息获取方案吗?
548浏览 • 1回复 待解决
Text模拟隐私协议,方案吗?
674浏览 • 1回复 待解决
har和hsp转换,方案吗?
582浏览 • 1回复 待解决
如何实现应用屏幕自动旋转
2168浏览 • 1回复 待解决
页面截图功能,什么方法?
642浏览 • 1回复 待解决
taskpool使用 ,谁有方案
634浏览 • 1回复 待解决
SM4 CBC模式加解密,方案吗?
927浏览 • 1回复 待解决
禁用屏幕旋转问题有知道吗?
2463浏览 • 1回复 待解决
转场动画,谁有方案吗?
500浏览 • 1回复 待解决
请问现在harmonyOS屏幕适配方案吗?
3660浏览 • 1回复 待解决
HarmonyOS如何设置应用跟随屏幕旋转
249浏览 • 1回复 待解决
Listitem点击变色什么方法吗
2049浏览 • 1回复 待解决