Chào mừng bạn đến Diễn Đàn ChơiMobile

Cộng đồng Mobile hàng đầu Việt Nam, Phát triển Android, iOS, Kỹ Thuật Mobile. Đăng ký ngay để tạo chủ để và cùng thảo luận !

Hướng dẫn tạo hiệu ứng trong suốt & mờ cho status bar và navigation bar

Thảo luận trong 'Thảo Luận - Phát Triển Rom/ Lập trình Mobile' bắt đầu bởi cybershot, 5/6/13.

  1. cybershot

    Official Member

    29/3/13
    47
    292
    0
    Bài này tớ viết tặng anh em SKY 850 trên tinhte.vn, hưởng ứng phong trào "trong suốt hóa" giao diện ROM gốc của SKY. Post thêm qua đây để các cụ tiện tìm kiếm.
    Mặc dù minh họa bằng dòng 850 JB, song cách thức làm cũng có thể ứng dụng cho các dòng máy SKY chạy JB khác vì phần lớn mã đều giống nhau.

    PHẦN 1: TẠO HIỆU ỨNG TRONG SUỐT & MỜ CHO STATUS VÀ NAVI BAR

    PHẦN 2: TẠO HIỆU ỨNG TRONG SUỐT & MỜ CHO NOTIFICATION EXPANDED PANEL

    Xem hướng dẫn ở đây
    http://choimobile.vn/threads/huong-...bar-va-navigation-bar.5432/page-6#post-208423

    A/ NGUYÊN LÝ BIỂU DIỄN ĐỘ TRONG, HIỆU ỨNG MỜ

    Mỗi thành phần đồ họa trên Android đều được thể hiện ở 2 dạng, hoặc là file ảnh (.png) hoặc là mã màu hex (hex colour code).

    Các file ảnh png, để có chế độ nền trong suốt, cần chỉnh sửa background bằng các công cụ xử lý ảnh số. Có người dùng Photoshop, người khác dùng 1 số công cụ có sẵn (ví dụ 9patch) trong bộ Android SDK.

    Các thành phần đồ họa có màu sắc thể hiện bằng mã màu thì cần đổi sang mã màu trong suốt. Với tông màu đen (#ff000000), Độ trong suốt/Hiệu ứng mờ thể hiện ở dạng mã màu hex như sau:

    #00000000 - Độ trong suốt 100%
    #3f000000 - màu đen với độ trong suốt 75% (~ 25% hiệu ứng mờ)
    #7f000000 - màu đen với độ trong suốt 50% (~ 50% hiệu ứng mờ)
    #bf000000 - màu đen với độ trong suốt 25% (~ 75% hiệu ứng mờ)

    Ngoài các mã trên, có thể gg để tìm thêm nhiều mã hiệu ứng mờ khác nữa.

    B/ CÔNG CỤ

    - Bung và đóng gói apk: Apktool v1.5.2 (hoặc bất kỳ công cụ nào có khả năng bung và đóng gói file apk Jelly Bean)
    - Chỉnh sửa file xml: Notedpad ++
    - Thao tác file nén và sign: 7zip
    - Dexodex ROM : AutoDEOTool v1.0.4 hoặc Android Ultimate Toolbox Pro.
    - Adb

    C/ CHUẨN BỊ

    1/ Điện thoại :
    - Chạy ROM gốc mọi phiên bản. Tốt nhất nên dùng ROM chưa chỉnh sửa
    - Đã root, cài sẵn adbdInsecure.apk, busybox và dexopt-wrapper để phục vụ công đoạn re-odexing

    2/ Máy tính

    - Cài sẵn Java Runtime Environment (JRE) trong bộ Oracle Java Development Kit.
    -Deodex ROM gốc rồi lấy ra các file (deodexed): framework-res.apk; SystemUI.apk và android.policy.jar
    - Chép vào cùng thư mục chứa apktool để tiện thao tác.

    D/ THỰC HIỆN

    ANDROID.POLICY

    Tải resource vào bộ nhớ:

    c:\apktool>apktool if framework-res.apk

    Bung file android.policy.jar bằng lệnh sau:

    c:\apktool>apktool d android.policy.jar

    Tìm và mở thủ tục sau:

    \com\android\internal\policy\impl\PhoneWindowManager.smali

    Tìm method này:

    .method public getSystemDecorRectLw(Landroid/graphics/RectI )

    (….)

    .end method

    Xóa toàn bộ nội dung của method này (bắt đầu bằng từ khóa .method và kết thúc bằng .end method) và thay bằng đoạn sau:

    .method public getSystemDecorRectLw(Landroid/graphics/RectI )
    .locals 1

    .parameter "systemRect"

    .prologue

    .line 3047

    iget v0, p0, Lcom/android/internal/policy/impl/PhoneWindowManager;->mSystemLeft:I

    iput v0, p1, Landroid/graphics/Rect;->left:I

    .line 3048

    iget v0, p0, Lcom/android/internal/policy/impl/PhoneWindowManager;->mSystemTop:I

    iput v0, p1, Landroid/graphics/Rect;->top:I

    .line 3049

    iget v0, p0, Lcom/android/internal/policy/impl/PhoneWindowManager;->mSystemRight:I

    iput v0, p1, Landroid/graphics/Rect;->right:I

    .line 3050

    iget v0, p0, Lcom/android/internal/policy/impl/PhoneWindowManager;->mSystemBottom:I

    iput v0, p1, Landroid/graphics/Rect;->bottom:I

    .line 3051

    const/4 v0, 0x0

    return v0

    .end method

    Đóng gói lại

    c:\apktool>apktool b android.policy.jar.out

    Cách sign file kết quả sau khi đóng gói:

    Dùng 7zip mở đồng thời file android.policy.jar gốc và file vừa đóng gói (trong thư mục /android.policy.jar.out/dist/..), kéo toàn bộ thư mục META-INF từ file gốc sang file vừa đóng gói.

    Re-odex file android.policy.jar

    Nối điện thoại với máy tính bằng cáp microUSB.
    Tạo thư mục tmp (nếu chưa có) trên bộ nhớ trong của điện thoại rồi chép file /android.policy.jar.out/dist/android.policy.jar vào thư mục đó (/sdcard/tmp). Đổi tên file trong thư mục /tmp/ thành patched_android.policy.jar.

    Từ dòng lệnh, gõ (hoặc copy-paste) lần lượt từng dòng lệnh sau. Cuối mỗi dòng lệnh, nhấn Enter để thực thi.

    adb devices

    adb remount

    adb shell

    su

    cp system/framework/android.policy.jar sdcard/tmp

    cp -f sdcard/tmp/patched_android.policy.jar system/framework/android.policy.jar

    dexopt-wrapper system/framework/android.policy.jar system/framework/patched_android.policy.odex $BOOTCLASSPATH

    cp -f sdcard/tmp/android.policy.jar system/framework

    chmod 777 /system/framework/android.policy.odex

    chmod 777 /system/framework/android.policy.jar

    chmod 777 /system/framework/patched_android.policy.odex

    chmod 644 /system/framework/android.policy.jar

    chown root.root /system/framework/android.policy.jar

    busybox dd if=/system/framework/android.policy.odex of=/system/framework/patched_android.policy.odex bs=1 count=20 skip=52 seek=52 conv=notrunc

    cp /system/framework/patched_android.policy.odex /system/framework/android.policy.odex

    (Chú ý: Đến đây điện thoại có thể khởi động lại. Hãy chờ khi máy khởi động xong vào Android mới thực thi các lệnh tiếp theo dưới đây)

    adb shell

    su

    chmod 644 /system/framework/android.policy.odex

    chown root.root /system/framework/android.policy.odex

    rm /system/framework/patched_android.policy.odex

    rm /data/dalvik-cache/*.dex

    reboot



    * SYSTEMUI

    Dùng apktool bung file SystemUI.apk để sửa:

    c:\apktool>apktool d SystemUI.apk

    Mở file và sửa mã xml. (Chủ yếu là sửa mã màu của android:background)

    Lưu ý ở các đoạn mã sửa dưới đây dùng hiệu ứng mờ 50%, tức là “#7f000000”, hoặc 75% (“#3f000000”) để minh họa. Các cụ có thể lựa chọn hiệu ứng trong suốt khác (100%; 80%; 75% v.v) tùy theo sở thích.


    \SystemUI\res\layout\navigation_bar.xml

    GỐC

    <com.android.systemui.statusbar.phone.NavigationBarView android:background="#ff000000" android:layout_width="fill_parent" android:layout_height="fill_parent"

    SỬA

    <com.android.systemui.statusbar.phone.NavigationBarView android:background="#7f000000" android:layout_width="fill_parent" android:layout_height="fill_parent"

    \SystemUI\res\layout-sw600dp\navigation_bar.xml

    GỐC

    <com.android.systemui.statusbar.phone.NavigationBarView android:background="#ff000000" android:layout_width="fill_parent" android:layout_height="fill_parent"

    SỬA

    <com.android.systemui.statusbar.phone.NavigationBarView android:background="#7f000000" android:layout_width="fill_parent" android:layout_height="fill_parent"

    \SystemUI\res\values\drawables.xml

    GỐC:
    <item type="drawable" name="status_bar_background">#ff000000</item>

    <item type="drawable" name="status_bar_notification_row_background_color">#ff1a1a1a</item>

    <item type="drawable" name="system_bar_background">#ff000000</item>

    <item type="drawable" name="notification_icon_area_smoke">#aa000000</item>

    SỬA:
    <item type="drawable" name="status_bar_background">#7f000000</item>

    <item type="drawable" name="status_bar_notification_row_background_color">#3f000000</item>

    <item type="drawable" name="system_bar_background">#7f000000</item>

    <item type="drawable" name="notification_icon_area_smoke">#3f000000</item>


    Bung file SystemUI, mở file
    \SystemUI\smali\com\android\systemui\statusbar\phone\PhoneStatusBar.smali

    tìm đến đoạn mã sau và sửa như dưới đây.

    <<<<<Quy ước:
    Ký hiệu (+) là thêm dòng lệnh sau dấu đó, (-) là xóa bỏ dòng lệnh sau dấu đó. Các dòng lệnh khác giữ nguyên. Đoạn mã sau khi sửa xong không bao gồm ký hiệu (+)/(-). >>>>>>>>>>>


    .method private getNavigationBarLayoutParams()Landroid/view/WindowManager$LayoutParams;

    .locals 6

    .prologue

    const/4 v1, -0x1

    .line 1328

    new-instance v0, Landroid/view/WindowManager$LayoutParams;

    const/16 v3, 0x7e7

    const v4, 0x800068

    (+) const/4 v5, -0x3

    move v2, v1

    (-) move v5, v1

    invoke-direct/range {v0 .. v5}, Landroid/view/WindowManager$LayoutParams;-><init>(IIIII)V


    .line 1338


    Lưu thay đổi


    Mở tiếp

    \SystemUI\smali\com\android\systemui\statusbar\tablet\TabletStatusBar.smali

    Tìm và sửa:


    .method private addStatusBarWindow()V

    .locals 7

    .prologue

    const/4 v1, -0x1

    .line 235

    invoke-virtual {p0}, Lcom/android/systemui/statusbar/tablet/TabletStatusBar;->makeStatusBarView()Landroid/view/View;

    move-result-object v6

    .line 237

    .local v6, sb:Landroid/view/View;

    new-instance v0, Landroid/view/WindowManager$LayoutParams;

    const/16 v3, 0x7e7

    const v4, 0x800048

    (+) const/4 v5, -0x3

    (-) const/4 v5, 0x4

    (-) move v2, v1

    invoke-direct/range {v0 .. v5}, Landroid/view/WindowManager$LayoutParams;-><init>(IIIII)V


    Mở thư mục

    \SystemUI\res\drawable-xhdpi

    Dùng Photoshop mở 2 file ảnh này ra. Dùng tính năng Background Erase Tool để xóa nền của ảnh đi, biến nó thành 100% trong suốt.

    ic_systembar_bg.png

    ic_systembar_bg_land.png

    (Nếu ko có Photoshop, có thể dùng phần mềm sửa ảnh số khác có chức năng tương tự)

    Thường thì chỉ cần sửa 2 file trên là đủ. Tuy nhiên, nếu muốn trong suốt thanh navi3 cho mọi style, có thể sửa tương tự như trên với các file ảnh khác như sau:

    ic_systembar_bg_02/03/04.png

    ic_systembar_bg_land_02/03/04.png


    Xong lưu thay đổi lại. Dùng công cụ apktool để đóng gói

    C:\Apktool>apktool b SystemUI

    Cách sign SystemUI.apk

    Dùng 7zip mở đồng thời file SystemUI.apk gốc và file mới sửa trong thư mục SystemUI/dist/…

    Kéo META-INF và AndroidManifest.xml từ file gốc thả sang file sửa. Chọn OK khi có hộp thoại yêu cầu xác nhận.

    Chép file SystemUI/dist/SystemUI.apk vừa sign xong vào điện thoại, tạm thời cho vào thư mục /system/, set permission rw-r-r (644), owner: root.root, xong rồi tiếp tục di chuyển đè lên file cũ trong /system/app/. Xóa file SystemUI.odex đi.

    Wipe dalvik cache lần nữa rồi reboot lại máy.

    (Không giống như các file framework, các ứng dụng hệ thống như SystemUI.apk sau khi deodex thì không nhất thiết phải re-odex lại).

    UPDATED (15/07/2013)
    Với 1 số phiên bản ROM có thanh điều hướng tùy biến giống như của dòng máy Vega Iron 870, để khắc phục hiện tượng chớp nháy màn hình sau khi áp dụng hiệu ứng trong- mờ như hướng dẫn trên, cần chỉnh thêm 1 số tham số trong file build.prop, cụ thể như sau:

    debug.mdpcomp.maxlayer = 2 (hoặc =1 hoặc =0)
    debug.composition.type = gpu
    dev.pm.gpu_samplingrate = 1

    E/ CHÚ THÍCH:

    - Khi test, hiệu ứng trong suốt và mờ của stt3 và navi3 phát huy đầy đủ với launcher gốc và Sony Xperia Z Launcher ở homescreen và app drawer. Với các ported launcher TouchWiz của Galaxy S4 và LG UI 3, 1 phần hiệu ứng bị mất tác dụng, hoặc với Status Bar (LG) hoặc với Navigation Bar (SS). Các launcher khác chưa thử.

    - Khi chạy các ứng dụng thì thanh navi sẽ khôi phục trạng thái gốc, còn status bar không còn trong suốt mà sẽ biến màu tùy theo ứng dụng. Riêng một số ứng dụng hỗ trợ full screen như Youtube hoặc MX video player thì ok.

    Vài hình minh họa

    choimobile.vn-Screenshot_2013-06-02-16-45-03.png

    choimobile.vn-Screenshot_2013-06-02-16-47-56.png

    choimobile.vn-Screenshot_2013-06-04-23-08-25.png
     
    46 people like this.
  2. chatgame

    chatgame Guest

    mình gà cái này lắm, bạn có cách nào mà up luôn đc ko, mình dùng bản rom gốc của tungkich bản cho máy 850l, máy mình cũng là may 850 bản L luôn
     
    4 people like this.
  3. hunter

    hunter Hội Chơi LTE3
    Senior Member

    21/12/12
    550
    674
    0
    Nam
    Thanks chủ thớt, cái này chỉ dùng cho sky phải không pro:)
     
    4 people like this.
  4. cybershot

    Official Member

    29/3/13
    47
    292
    0
    Mình chỉ có sẵn bản patch giao diện dành cho máy S thôi. Dòng L/K thì bạn chờ 1 vài hôm nữa chắc sẽ có người làm.

    Nguyên lý và cách làm có thể áp dụng cho ROM gốc JB của dòng máy SKY, ROM CM10 nói chung. Và cũng có thể dùng được với các dòng máy khác nữa, tuy nhiên tớ không dám phần này chắc vì chưa có điều kiện test thử trên các dòng khác SKY.
     
    12 people like this.
  5. boykinhdi

    Senior Member

    23/2/13
    6,406
    31,113
    0
    Nam
    quá hay,thank bác nhìu:)
     
    10 people like this.
  6. tedofu_katozi

    tedofu_katozi TNT Team
    Senior Member

    10/12/12
    2,108
    5,588
    0
    Nam
    Trồng khoai sắn và nuôi gà
    Nơi con sông Hồng chảy vào đất Việt.
    Hoa mắt chóng mặt ù tai nhức đầu
     
    12 people like this.
  7. hanzoo1504

    Senior Member

    14/12/12
    4,523
    16,658
    0
    Nam
    Đang tìm việc
    VIETNAMESE
    sao thế cụ tedofu. Say bia à
     
    7 people like this.
  8. hanzoo1504

    Senior Member

    14/12/12
    4,523
    16,658
    0
    Nam
    Đang tìm việc
    VIETNAMESE
    Hướng dẫn này tuyệt đỉnh cho anh em thích vọc rom đây. Thank you chủ thớt nhé:D
     
    6 people like this.
  9. boykinhdi

    Senior Member

    23/2/13
    6,406
    31,113
    0
    Nam
    Mỗi lần cụ cybershotcybershot ra tay là gạo xay thành cháo.Cụ thương thì thương cho chót hd mod cái Lg G lockscreen,sony xperia lockscreen và cái BBlockscreen cho dòng sky đi cụ ơi.Thank cụ trc nhé.:D

    Sent from my IM-A840S using Tapatalk 2
     
    2 people like this.
  10. lengochaiau

    Senior Member

    20/4/13
    235
    462
    0
    Nam
    Anh cybershot a có thể cho e bộ navi trong suốt của hinh trên ko anh. e chép vào 840 được ko anh. còn vấn đề nữa em lấy file framewok va system ui của mấy bản mà cụ vương mod em làm trong suốt được không anh
     
    2 people like this.
  11. joker.spx

    Senior Member

    10/5/13
    2,030
    8,730
    0
    Nam
    :D v lấy cái framework-res.apk ra để làm j v bác cybershotcybershot ơi :oops:

    Sent from my IM-A840S using Xparent Blue Tapatalk 2
     
    2 people like this.
  12. boykinhdi

    Senior Member

    23/2/13
    6,406
    31,113
    0
    Nam
    lấy fw để nó đọc cái policy.jar chứ làm dì nữa
     
    4 people like this.
  13. zico8x

    Senior Member

    29/3/13
    612
    2,464
    0
    Nam
    e cảm thấy choáng và váng các cụ ạ:eek::rolleyes::D
     
    2 people like this.
  14. Đặng Hà haha

    Senior Member

    27/4/13
    196
    311
    0
    Nam
    Không hiểu hoa mắt chóng mặt :p
    có cách nào đơn giản hơn chút không bác
     
    2 people like this.
  15. cybershot

    Official Member

    29/3/13
    47
    292
    0
    Trước nay em cũng không để ý đến mấy cái lockcreen, nên thực sự cũng chưa biết cách port như thế nào.
    Mới xem cái guide của 1 cụ trên XDA hướng dẫn port XperiaZ lockscreen sang cho Samsung based rom.

    http://forum.xda-developers.com/showthread.php?t=2168411

    Nếu làm theo hướng như thế này mà thành công thì chắc em sẽ thử ngải cứu 1 phát xem sao. Có điều em hay làm kiểu tùy hứng nên nhanh chậm thế nào bản thân em cũng chưa biết được.

    Mấy bản ROM của cụ Vương ấy làm trong suốt tốt, nó là ROM SKY gốc mà.

    Bộ patch trong suốt dành cho 850s có link ở dưới. Nhưng không copy nguyên si cho vào 840 được đâu nhé. Bootloop ngay. Bản này làm cho 850S v2.17. Quẳng sang phiên bản thấp hơn của 850S còn dính bootlop nữa là.

    Nếu máy 850S thì trình tự cài qua CWM/TWRP lần lượt thế này:

    1/ Cài ROM gốc JB 2.17
    2/ Cài theme IRON SKY
    http://www.fshare.vn/file/T5A6K4BVWT
    3/ Cài bộ mod hiệu ứng đèn mờ (stt3+navi3+notification panel) IM-A850S-JB217-Transparent UI patch
    http://www.mediafire.com/?xww66o2tlng2co6

    framework-res.apk nó là resource của ROM mà, nên trước khi bung file hệ thống ra bằng công cụ apktool, bao giờ chẳng phải load nó trước để làm nguồn.

    Ở hướng dẫn trên, android.policy.jar có thể ít phụ thuộc vào framework-res, nhưng ông SystemUI.apk khi bung ra mà thiếu nguồn load từ framework-res là đứt.
     
    11 people like this.
  16. boykinhdi

    Senior Member

    23/2/13
    6,406
    31,113
    0
    Nam
    Iem cg xem cái nguồn xda đấy rồi và làm theo nhưng cứ đóng gói android.policy.jar là lỗi với lại mấy cái line trong đó khác sky nên chỉ dò theo đg dẫn impl/lockscreen thấy giống thì thay vào?:(

    Sent from my IM-A840S using Tapatalk 2
     
    4 people like this.
  17. chatgame

    chatgame Guest

    làm cho bản L đi anh
     
    4 people like this.
  18. congaixinh

    Official Member

    27/12/12
    98
    101
    0
    Nữ
    4 people like this.
  19. tungkick777

    tungkick777 Team SS
    Thành viên BQT Điều Hành Viên

    15/12/12
    3,250
    6,747
    0
    Nam
    quá hay có cái để vọc rùi thank cyber nhiều
     
    6 people like this.
  20. chatgame

    chatgame Guest

Chia sẻ trang này