/override/frameworks/base/cmds/bootanimation/BootAnimation.cpp

加上

int temp = resolution.height;++    resolution.height= resolution.width;+    resolution.width= temp;++    Rect destRect(resolution.width, resolution.height);++    SurfaceComposerClient::Transaction t;+    t.setDisplayProjection(mDisplayToken, ui::ROTATION_90, destRect, destRect);+    t.apply();

上面是开机动画横屏,开机logo横屏

override/vendor/mediatek/proprietary/external/libshowlogo/charging_animation.cpp

里面的anim_drm_init方法的else phical_screen.rotation原本是0,就是竖屏,改成90.

anim_fb_init方法里也同理int rotation = ORIENTATION_90;

/vendor/mediatek/proprietary/external/libshowlogo/show_animation_common.c

文件里anim_fb_init方法同理

但其实除了改else的,也可以直接改最开始的rotation,让他锁定在一个判断内

源码是    int rotation = getRotation();

改成int rotation = ORIENTATION_90; 那这样就只能走 以下判断

else if (ORIENTATION_90 == rotation){ //90phical_screen.rotation = 90;}

下面这个文件 或许没用到,mediatek/proprietary/bootable/bootloader/lk/platform/mt6765/mt_logo.c

里面有个init_fb_screen方法的elsephical_screen.rotation = 0;换成90

override/vendor/mediatek/proprietary/packages/apps/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java

在加loadSetting(stmt, Settings.System.USER_ROTATION,1);

下面开始是默认横屏

override/frameworks/base/core/java/com/android/internal/view/RotationPolicy.java

public static final int NATURAL_ROTATION = Surface.ROTATION_0换成90

override/frameworks/base/services/core/java/com/android/server/wm/DisplayPolicy.java

  修改底部虚拟按键方向位置,里面把底部导航栏写死在底部出现

int navigationBarPosition(int displayWidth, int displayHeight, int displayRotation) {       

 /*/ tyd.dkl, def landscapeif (navigationBarCanMove() && displayWidth > displayHeight) {if (displayRotation == Surface.ROTATION_270) {return NAV_BAR_LEFT;} else if (displayRotation == Surface.ROTATION_90) {return NAV_BAR_RIGHT;}}//*/return NAV_BAR_BOTTOM;}

就中间那一块注释

这里面

mNavigationBarCanMove =mDisplayContent.mBaseDisplayWidth != mDisplayContent.mBaseDisplayHeight&& res.getBoolean(R.bool.config_navBarCanMove);

所以找到这个布尔值config——navBarCanMove,在framework下就是false,但是我们已经设置了90度,所以会跳到右边

override/frameworks/base/services/core/java/com/android/server/wm/DisplayRotation.java

private int mRotation;赋值为1

private int mUserRotation = Surface.ROTATION_0;改为90

在这个循环里面,的

switch (orientation) {

default:

里面return Surface.ROTATION_0;把这个换成90

override/frameworks/native/services/surfaceflinger/DisplayDevice.cpp

setProjection(ui::ROTATION_0, Rect::INVALID_RECT, Rect::INVALID_RECT);

换成90

改到这里后效果的确是默认横屏了,但是开启了自动旋转后,无法转动屏幕。

所以要在launcher上改主屏可旋转

override/packages/apps/Launcher3/res/xml/launcher_preferences.xml

android:key="pref_allowRotation"android:title="@string/allow_rotation_title"android:summary="@string/allow_rotation_desc"-        android:defaultValue="false"+        android:defaultValue="true"android:persistent="true"

默认值换成true,但这个显然是没用的,就是长按屏幕进主屏幕设置里面有个主屏幕旋转开关,这个xml只是把这个开关改成true默认,每次进来之后重新赋值,所以刷机之后还是无法旋转。

所以

主屏幕可旋转

override/vendor/mediatek/proprietary/packages/apps/Launcher3/src/com/android/launcher3/DeviceProfile.java

allowRotation = originalSmallestWidth >= MIN_TABLET_WIDTH;

这个直接改成true

这个因为我们把这个屏幕改成默认横屏了,那么他这个originalSmallestWidth就变小了,因为以前默认的是竖屏,所以那这样就返回false 就是不允许旋转。原本它的宽是竖着看的长,现在的宽就变成短的那个边。

这个改完之后我们会发现主屏幕设置里面那个主屏旋转的开关没了。那其实就不需要改那个xml文件了,原理如下

还是在Launcher3里面有个src/com/android/launcher3/states/RotationHelper.java

public void initialize() {if (!mInitialized) {mInitialized = true;setIgnoreAutoRotateSettings(mActivity.getDeviceProfile().allowRotation);mActivity.addOnDeviceProfileChangeListener(this);notifyChange();}}

初始化方法里面setIgnoreAutoRotateSettings(mActivity.getDeviceProfile().allowRotation);

里面参数就是刚刚改的true。这个忽视自动旋转设置的方法,就是移除这个菜单而已

private void setIgnoreAutoRotateSettings(boolean ignoreAutoRotateSettings) {

        // On large devices we do not handle auto-rotate differently.

源码里面也给了,大屏设备就是会忽略掉这个选项的,只不过这个项目估计源码不是正宗对应的,虽然机器是平板但是源码还是用的是手机的。

这里面有个

mHomeRotationEnabled = mSharedPrefs.getBoolean(ALLOW_ROTATION_PREFERENCE_KEY,mActivity.getDeviceProfile().allowRotation);

所以这句话已经把之前那个xml文件的默认值写了,所以在这写才标准。在xml文件里面直接写,只用第一次进去之后才有效果。

if (!mIgnoreAutoRotateSettings) {if (mSharedPrefs == null) {mSharedPrefs = Utilities.getPrefs(mActivity);mSharedPrefs.registerOnSharedPreferenceChangeListener(this);}mHomeRotationEnabled = mSharedPrefs.getBoolean(ALLOW_ROTATION_PREFERENCE_KEY,mActivity.getDeviceProfile().allowRotation);} else {if (mSharedPrefs != null) {mSharedPrefs.unregisterOnSharedPreferenceChangeListener(this);mSharedPrefs = null;}}

这个方法的前提就是if (!mIgnoreAutoRotateSettings) {

满足了才把那个preference显示出来。,这里面getpreference就只是那一个主屏是否旋转的preference

下次遇到可以试试宏控改掉CONFIG_MTK_LCM_PHYSICAL_ROTATION="0",三个编译文件里都换掉debug_defconfigdefconfiglk.mk

加了GMS包的项目走的launcher是下面这个以及package下面的一起

vendor/google/apps/SearchLauncher

这里面没有的文件就用package里面的效果

开机动画默认横屏,开机默认横屏,修改底部虚拟按键方向位置,主屏幕可旋转相关推荐

  1. Ubuntu18.04.5深度定制主题,修改背景图片壁纸开机动画,完美去掉默认背景紫色

    Ubuntu18.04.5深度定制主题,修改背景图片壁纸开机动画,完美去掉默认背景紫色 问题描述 修改后的效果 详细操作步骤 0. 准备图片 1. 修改背景:grub引导启动界面(一般系统不显示可跳过 ...

  2. Android 9.0 延时开机动画解决首次开机黑屏和去掉android正在启动的提示框

    1.概述 在9.0的系统产品rom定制化开发中,在一些产品中会出现在首次开机的时候,由于在开机动画播放完以后会出现几秒短暂的黑屏情况,然后进入默认Launcher,这在产品体验上 也是感觉到有点差,所 ...

  3. android+4.4.2+隐藏虚拟按钮,Android 4.4.2 横屏应用隐藏状态栏和底部虚拟键的方法...

    //去title requestWindowFeature(Window.FEATURE_NO_TITLE); //隐藏状态栏 getWindow().setFlags(WindowManager.L ...

  4. Android 底部虚拟按键颜色修改

    最近做相见发现一个bug, 如图 底部虚拟按键出现了半透明的颜色 和相机底部重叠了,因此需要修改 ,方法如下: Window window = getWindow();window.clearFlag ...

  5. win11修改底部任务栏显示位置

    win11修改底部任务栏显示位置 1.桌面-右键-个性化 2.任务栏对齐方式-左

  6. c语言for循环开机动画,android8.1开机动画启动分析

    init.cppAOSP/system/core/init/init.cpp SurfaceFlinger是由init进程启动的 int main(int argc, char** argv) { . ...

  7. ATV 开发 一、ATV 开机动画定制 android 开机动画

    定制ATV开机动画 谷歌ATV的开机动画必须符合如下要求: 必须遵循以下顺序: 第一屏logo画面修改:允许客户修改 ATV 允许添加自己的开机动画. Android TV 谷歌原生开机动画,此动画不 ...

  8. android直到开机动画播放完,开机动画播放完进入launcher黑屏2s

    当修改了开机动画的播放次数后,例如由无限循环播放改为只播放一次,开机动画播放完进入launcher黑屏几秒. 增加一句getWindow().setBackgroundDrawableResource ...

  9. android 开机动画尺寸,Android开机Logo动画制作

    开机Logo制作 1.准备Logo图片 准备一张符合尺寸要求(例如:1280x720)的图片,最好是png或jgp. 2.用Hitool工具制作镜像文件 海思芯片使用的是Hitool工具,打开Hito ...

最新文章

  1. 8年面试官问到:数据库自增 ID 用完了会咋样?
  2. Linux0.11进程切换和TSS结构
  3. 三、值类型与引用类型
  4. linux 的读写操作(转)
  5. 通勤一小时,堵车半小时,AI 救救社畜
  6. 删除的文件如何恢复?一个技巧就解决
  7. Python自动化运维_批量执行py脚本
  8. kubernetes 网络callico和flannel两种网络
  9. 系统集成j2cache
  10. @程序员:连小学生都开始学编程了,你们怕了吗?
  11. 深入探讨PageRank
  12. 2db多少功率_功率和dB的关系很详细
  13. Webstorm的一些常用快捷键
  14. Android 上拉,下拉刷新。RecyclerView的使用(最后附完整代码)
  15. echarts图表中增加一条警戒线【平均值】
  16. flexnet许可证服务器_如何手动配置 Flexnet 许可管理程序
  17. 虚拟服务器设置取消登录密码,取消windows 2008开机密码实现自动登陆的几种方法...
  18. 2019年【已解决】身份验证错误,要求的函数不正确或登录windows2008服务器提示账号密码错误的解决方案
  19. 怎样用python对Excel的一列或几列去重
  20. 报错-The left-hand side of an assignment must be a variable

热门文章

  1. 激光条纹中心提取——Zhang-Suen法python
  2. Python代码实战(初级篇)————7、斐波那契数列
  3. java 求e_Java求自然对数底e的值 | 学步园
  4. (2356)忙里偷闲-封装汇编编写的水波特效供C++调用
  5. WAMP 下 awstats 配置
  6. invalid bound statement (not found) 错误
  7. DHCP配置及相关命令
  8. 一炉真香起 静中开鸿蒙是谁写的,430章香海香消玉殒
  9. The user specified as a definer does not exist
  10. bbsxp 2008 简单搭建