亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

Android 5.0 開(kāi)機(jī)橫屏修改方法

asal 2017-01-13 09:11:23 595
abstrak:這篇文章主要介紹了 Android 5.0 開(kāi)機(jī)橫屏修改方法,大概可以分為三部分,具體修改方法,大家參考下本文<span style="font-family: Arial, Helvetica, sans-serif;">如果理解了Android的設(shè)計(jì)的原理, 其實(shí)這個(gè)修改原理十分簡(jiǎn)單, 比一些網(wǎng)上流出來(lái)

這篇文章主要介紹了 Android 5.0 開(kāi)機(jī)橫屏修改方法,大概可以分為三部分,具體修改方法,大家參考下本文

<span style="font-family: Arial, Helvetica, sans-serif;">如果理解了Android的設(shè)計(jì)的原理, 其實(shí)這個(gè)修改原理十分簡(jiǎn)單, 比一些網(wǎng)上流出來(lái)的粗暴的修改方式既美觀又實(shí)用。</span>

修改分為三部分:

1: 上層(Java)修改

既然設(shè)計(jì)到屏幕的修改, 肯定想到了直接修改WMS(比較粗暴的方式)。

其實(shí)Android的很多的需求都是通過(guò)配置文件來(lái)的, 這么明顯的設(shè)計(jì)需求只要去找相應(yīng)的配置就可以了。

core/res/res/values/config.xml

<bool name="config_supportAutoRotation"><span style="color:#ff0000;">false</span></bool>
<integer name="config_lidOpenRotation"><span style="color:#ff0000;">90</span></integer>

修改后發(fā)現(xiàn)開(kāi)機(jī)后, 開(kāi)機(jī)畫(huà)面是橫屏顯示的,進(jìn)入鎖屏界面, 屏幕做了一次旋轉(zhuǎn)操作, 這個(gè)時(shí)候窗口才真正的橫屏。

跟需求還不一樣, 進(jìn)入鎖屏前需要橫屏。

所以需要修改WMS的默認(rèn)方向。

/services/core/Java/com/Android/server/wm/WindowManagerService.Java

int mRotation = <span style="color:#ff0000;">1</span>;

   

修改后開(kāi)機(jī)發(fā)現(xiàn): 開(kāi)機(jī)畫(huà)面啟動(dòng)后是豎屏的, 運(yùn)行一段時(shí)間變成橫屏, 進(jìn)入鎖屏界面, 也是橫屏, 不用再做橫豎切換。

2: 底層(C++)修改

開(kāi)機(jī)啟動(dòng)畫(huà)面, 剛開(kāi)始的時(shí)候是豎屏的。

原因很簡(jiǎn)單: 底層的SF初始化的時(shí)候肯定是豎屏的得跟WMS匹配。 所以修改也很簡(jiǎn)單。

framework/native/services/surfaceflinger/DisplayDevice.cpp

// initialize the display orientation transform.
setProjection(DisplayState::<span style="color:#ff6666;">eOrientation90</span>, mViewport, mFrame);

再開(kāi)機(jī)發(fā)現(xiàn)問(wèn)題來(lái)了, 開(kāi)機(jī)畫(huà)面顯示有問(wèn)題, 而且進(jìn)入到鎖屏界面前也會(huì)閃一下。

3: Bootanimation 修改

到第二部的修改一直都很順利, 而且分析的效果跟修改后的顯示也是比較相符的。

但是出現(xiàn)的一閃的畫(huà)面, 讓我比較苦惱, 一直以為是修改的不夠徹底, 一直找其他初始化的地方是否沒(méi)修改, 找了半天沒(méi)找到相關(guān)的修改, 因?yàn)閼?yīng)該考慮的地方都已經(jīng)修改了。
所以接下來(lái)只能看Bootanimation了。

終于發(fā)現(xiàn)了原因:

 status_t status = SurfaceComposerClient::getDisplayInfo(dtoken, &<span style="color:#ff0000;">dinfo</span>);    

// create the native surface
sp<SurfaceControl> control = session()->createSurface(String8("BootAnimation"),
    dinfo<span style="color:#ff0000;">.h</span>, dinfo<span style="color:#ff0000;">.w</span>, PIXEL_FORMAT_RGB_565);

Surface申請(qǐng)的時(shí)候是按照豎屏申請(qǐng)的, 這個(gè)時(shí)候我們的屏幕已經(jīng)是橫屏了。

修改后運(yùn)行, 發(fā)現(xiàn)完美解決了開(kāi)機(jī)橫屏的問(wèn)題。

對(duì)于進(jìn)入鎖屏前一閃的問(wèn)題: 這個(gè)也是由Bootanimation導(dǎo)致, 因?yàn)锽ootanimation開(kāi)始的時(shí)候是豎屏, WMS設(shè)置屏幕為橫屏的時(shí)候, Bootanimation還沒(méi)有消失, 所以導(dǎo)致了一閃的問(wèn)題。

抓住這個(gè)修改主線, 不論Android怎么變, 是之前4.0 還是將來(lái)的6.0, 都是可以修改的。 (PS: 這里不涉及fastboot的logo的修改, 這個(gè)修改更簡(jiǎn)單 替換圖片就可以了)

更多關(guān)于Android 5.0 開(kāi)機(jī)橫屏修改方法請(qǐng)關(guān)注PHP中文網(wǎng)(ipnx.cn)其他文章!

Nota Keluaran

Penyertaan Popular