簡體   English   中英

9-Patch可繪制尺寸Android。 不同密度如何處理未拉伸區域?

[英]9-Patch drawable dimensions Android. How do different densities handle the non-stretched areas?

在此輸入圖像描述

考慮上面的圖像。 - 虛線划分了9-Patch png,我將從photoshop文件中切出。 我需要它來創建一個彈出框。 - 該盒子包含一個dropShadow,如本照片中的測量工具所示。 - 粉色線條用於顯示我將如何使用draw9Patch工具創建9-Patch。

我的問題是 :如果我有一個帶有9-Patch的View“Container”作為背景我需要確保它的子視圖總是在白框內。 我打算用這個填充。 我打算將填充設置為與測量工具相等。 因此,如果它在photoshop中為30px,我將為容器設置layout_paddingLeft"=30dp" (設計是在MDPI,所以我假設這個轉換是可以的)。 但是,不同密度的屏幕如何處理9路徑。 例如,測量面積是30px還是30dip

通過draw9patch工具,您可以定義:

在此輸入圖像描述

  • 垂直拉伸 :左側的黑色像素
  • 水平拉伸 :頂部的黑色像素
  • 垂直內容 :右側的黑色像素
  • 水平內容 :底部的黑色像素

請注意,拉伸像素不必是連續的,因此您可以從拉伸中排除某些特定切片(請查看上面的彈出箭頭)。 同時,您可以合理地了解您的內容放置位置,只需看一下右邊的預覽,紫色區域就可以了。正如您可以想象的那樣,您不必指定任何填充在您的布局中: 視圖將使用您設置為背景的9patch來考慮這些值

無拉伸區域隨像素密度而縮放。 因此,如果將上面的9patch設置為mdpi資源,則最左上角的切片將以50x40像素區域@mdpi和100x80像素區域@xhdpi呈現。 最左邊的拉伸區域根據dpi排列它們的寬度,而高度根據內容排列。 其他拉伸切片以類似的方式工作。

在這兩種情況下,處理“低分辨率”9patch都會導致丑陋的像素化偽像。 一種可能的解決方案是為每個支持的dpi提供不同的9patch,或者僅定義更高的dpi(xhdpi)並讓Android相應地縮小它們。

內容邊界也作為dp處理,因此它們根據像素密度進行縮放。 例如:在原始9patch中定義的左邊填充為40px @ mdpi,將在80px @ xhdpi中進行轉換,因此內容將永遠不會流出給定的邊界。 請注意,您甚至可以通過布局中的padding*屬性覆蓋9patch中指定的內容邊界。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM