轉:點9圖

關于”點九”?

轉:http://mux.baidu.com/?p=1506

“點九”是andriod平臺的應用軟件開發里的一種特殊的圖片形式,文件擴展名為:.9.png

?

智能手機中有自動橫屏的功能,同一幅界面會在隨著手機(或平板電腦)中的方向傳感器的參數不同而改變顯示的方向,在界面改變方向后,界面上的圖形會因為長寬的變化而產生拉伸,造成圖形的失真變形。

我們都知道android平臺有多種不同的分辨率,很多控件的切圖文件在被放大拉伸后,邊角會模糊失真。

OK,在android平臺下使用點九PNG技術,可以將圖片橫向和縱向同時進行拉伸,以實現在多分辨率下的完美顯示效果。

【普通拉伸和點九拉伸效果對比】

對比很明顯,使用點九后,仍能保留圖像的漸變質感,和圓角的精細度。

從中我們也可以理解為什么叫“點九PNG”,其實相當于把一張png圖分成了9個部分(九宮格),分別為4個角,4條邊,以及一個中間區域,4個角 是不做拉升的,所以還能一直保持圓角的清晰狀態,而2條水 平邊和垂直邊分別只做水平和垂直拉伸,所以不會出現邊會被拉粗的情況,只有中間用黑線指定的區域做拉伸。結果是圖片不會走樣

二.“點九”的制作方法

方法1:使用 “draw9patch”工具繪制,流程如下

1.? 安裝工具

首先你需要給自己的電腦安裝上java于系統的默認目錄下。沒有安裝java的同學可以在百度搜索:jdk-6u20-windows-i586,安裝包大小80M左右。

然后使用andriod模擬器—android-sdk-windows,打開SDK/tools目錄下的“draw9patch.bat”文件,出現載入窗口:

2.導入并編輯

將png圖片拖拽到該窗口中

如下圖,自動進入編輯界面。圖中介紹了每個區域的內容及功能注釋。

預覽右側的視圖發現,圖片的邊緣處于普通拉伸狀態。

現在我們在圖片邊緣點擊左鍵,繪制出黑線,即圖片需要被拉伸的部分。如下圖,對4條黑線做了注釋。

如果失誤多繪的部分,可按住shift鍵的同時點擊鼠標左鍵擦除)。

如圖所見,三種拉伸結果均已完美顯示,已實現我們想要的拉伸效果,假設這是一個有顯示文字的窗體,那么文字顯示的區域,程序也會控制在黑線對應范圍。

以下這些圖片,包括異性(非規則圖形)圖片,也可以通過點九PNG實現橫縱向的自然拉伸。

【draw9patch.bat其他功能說明】

②? ?Show lock:顯示不可繪區域

② Show patches:預覽這個繪圖區中的可延伸宮格(粉紅色代表一個可延伸區域)

③ Show patches:預覽視圖中的高亮區域(紫色區域)

④ Show bad patches:在宮格區域四周增加一個紅色邊界,這可能會在圖像被延伸時產生人工痕跡。如果你消除所有的壞宮格,延伸視圖的視覺一致性將得到維護。

3.保存和輸出

點擊左上file- save,保存文件,自動生成一張后綴名為“*.9.png”格式的圖片,圖片上下左右各增加了1px的黑線。

?

方法2:直接使用 PS等平面工具繪制,流程圖如下

?

如流程圖所示,相對與方法1,只需2個步驟就可得到.9.png圖片,具體步驟為:

1.? 確定切圖后直接改變圖片的畫布大小,

2.? 手動將上下左右各增加1px

3.? 使用鉛筆工具,手動繪制拉伸區域,色值必須為黑色(#000000)。

4.? 存儲為web所用格式,選擇png-24,儲存時手動將后綴名改為.9.png

不過這種方法的缺點是不能實時預覽,判斷并測試拉伸區域的準確性。

使用此方法需要注意以下2點:

1. 手繪的黑線拉伸區必須是#000000,透明度100%,并且圖像四邊不能出現半透明像素;

2. 你的.9.png必須繪有拉伸區域的黑線;

否則,圖片不會通過android系統編譯,導致程序報錯。還有,有同學疑惑解壓縮apk文件后,.9.png圖片里的黑線怎么沒了?

那是因為andriod程序在把文件打包成apk的時候,程序會自動把*.9.png圖片邊緣的黑線去掉,所以解壓縮apk后看到的.9.png文件是沒有黑線的。

三.使用“點九”的意義

關于下圖,經過測試發現使用普通png的顯示效果出現明顯的變色橫紋。而.9.png圖片的顯示效果明顯優于普通png。

使用.9.png格式后,橫紋問題基本已解決。因為對于.9.png圖片,android系統程序有對其優化的算法。

由于android手機屏幕的材質質量差距大。很多屏幕不支持16位以上的顏色顯示。

所以渲染后結果出現丟失顏色,故造成橫紋顯示。

經與多款android手機對比后發現,屏幕越次的手機橫紋越明顯。

而使用了*.9.png圖片技術后,只需要采用一套界面切圖去適配不同的分辨率,而且大幅減少安裝包的大小。而且這樣程序不需要專門做處理的就可以實現其拉伸,也減少了代碼量和開發工作量。

轉載于:https://www.cnblogs.com/redspider110/archive/2012/04/13/2445433.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/379817.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/379817.shtml
英文地址,請注明出處:http://en.pswp.cn/news/379817.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Python HTMLCalendar類| 帶實例的formatyear()方法

Python HTMLCalendar.formatyear()方法 (Python HTMLCalendar.formatyear() Method) formatyear() method is an inbuilt method of the HTMLCalendar class of calendar module in Python. It works on HTMLCalendar class object and returns an HTML table consisting of th…

2009中國企業家新春聯誼會

2009中國企業家新春聯誼會——把握當前機遇,笑對經濟危機,暢飲將帥美酒尊敬的嘉賓:當前,國際形勢正在發生深刻而復雜的變化,由美國次貸危機引發的全球經濟危機已經愈演愈烈,美國前五大投資銀行有3家宣告破產…

串口通信的基本原理----STM32

串口通信基本原理 1. 處理器與外部設置通信的基本方式 并行通信:數據各個位同時傳輸串行通信:數據按位順序傳輸 在串行通信中,按照數據的傳輸方向,又分為: 單工:數據傳輸只支持在一個方向傳輸半雙工&am…

java獲取vm運行參數_如何獲取在Java中運行Java VM的版本?

java獲取vm運行參數To get the version of running VM (Virtual Machine) in Java, we use the getProperties() method, which is defined in System class, while calling the method, we need to pass the property name to get the version of running Java VM. 要獲取Java…

Spring MVC+Ant+Tomcat+Eclipse最簡單的demo

第一步是Java的Web環境搭建,下載Eclipse(或者更好的但收費的IDE-IntelliJ Idea,和Resharper一家公司出的),下載Tomcat,下載JDK,下載Spring,注意安裝Tomcat的時候配置一下管理員賬號和…

MySQL的環境變量配置詳細步驟

1.下載MySQL 例如下載:mysql-installer-community-5.5.60.1 我以這個版本為例 2.右擊->我的電腦->屬性 3. 4.找到在 系統變量 中找到 Path 5.找MySql的bin目錄(每個人的電腦上這個文件的位置應該是差不多的,找到之后復制下來&#x…

轉帖:強命名程序集(Strong Name Assembly)的概念

強命名程序集(Strong Name Assembly)的概念因為不同的公司可能會開發出有相同名字的程序集來,如果這些程序集都被復制到同一 個相同的目錄下,最后一個安裝的程序集將會代替前面的程序集。這就是著名的Windows “DLL Hell”出現的原…

串口發送通信---UART發送---STM32F4實現

串口發送程序配置過程(HAL庫) 初始化串口相關參數,使能串口 HAL_StatusTypeDef HAL_UART_Init(UART_HandleTypeDef *huart)該函數的參數是串口的基址,在stm32f429xx.h文件中,定義了8個UART_HandleTypeDef的值&#x…

開源軟件 許可證密鑰_自由和開源軟件-1中的重要許可證

開源軟件 許可證密鑰Its important to take note that there are no good or bad licenses and that no license is superior to another. Anybody can make an open-source license that suits their extravagant, which is the explanation that there are such huge numbers…

串口接收中斷配置過程---STM32F4--HAL

串口接收中斷程序配置過程(HAL) 初始化相關參數,使能串口: HAL_UART_Init();該函數的參數是串口的基址,在stm32f429xx.h文件中,定義了8個UART_HandleTypeDef的值,分別是USART1、USART2、USART…

electron 切換至esm

前言 好消息,經過不知道多少年的討論。 electron28.0.0開始(23.08.31),默認支持esm了。 see https://github.com/electron/electron/issues/21457 使用方法 升級至electron^28.0.0簡單地在package.json中添加"type":…

javascript運算符_JavaScript中!=或!==運算符之間的區別

javascript運算符We can perceive the differences between these two operators as the same difference that occurs between double equalsTo () and triple equalsTo () operators. We already know that the (!) not-operator used along with () operator is used to che…

實訓09.09:簡單的彩票系統(機選多注)

package wsq; import java.util.Random; import java.util.Scanner;//機選多注 public class MoreCaiPiao {public static void main(String[] args) {// 定義二維數組 存儲多注彩票int[][] numArray new int[5][7];/** 二維數組中 未賦值之前的元素值都為0 { {0,0,0,0,0,0,0}…

項目組的激勵策略

我們經常會采取一獎勵措施,來激發大家工作的積極性,從而達到提高工作效率的目的。那么我們應該對項目組中的那些類型的人實施激勵呢?項目的實踐過程中,筆者認為有兩類人需要給予正面的獎勵。一,能夠主動思考&#xff0…

zk中的Datebox中得到Timestamp

String formatDate sdf.format(datebox.getValue()); para.setCreate_time(Timestamp.valueOf(formatDate)); 轉載于:https://www.cnblogs.com/avenxia/archive/2012/04/15/2450052.html

定時器--STM32f4--HAL

基本概念 STM32中有三種定時器,高級定時器,通用定時器,基本定時器,具體如下圖: 發生如下事件將產生中斷/DMA 更新:計數器向上溢出/向下溢出,計數器初始化觸發事件:計數器啟動、停…

實訓09.09:簡單的彩票系統(自選多注)

package wsq; import java.util.Scanner; public class CustomCaipiao {public static void main(String[] args) {/** 用戶自選彩票數字: 1.使用scanner來輸入彩票號碼! 2.直接寫成自選多注,注數由用戶輸入決定;* 3.紅球值1-33,不重復;藍球值1-16;*/// 定義二維數組 存儲所有的…

c ++查找字符串_C ++類和對象| 查找輸出程序| 套裝4

c 查找字符串Program 1: 程序1&#xff1a; #include <iostream>using namespace std;class Sample {int X;int* const PTR &X;public:void set(int x);void print();};void Sample::set(int x){*PTR x;}void Sample::print(){cout << *PTR - EOF << …

ASP.NET 泛型類型 Dictionary操作

protected void Page_Load(object sender, EventArgs e){//泛型Dictionary Dictionary<string, string> dit new Dictionary<string, string>();dit.Add("13", "張三");dit.Add("22", "李四");Response.Write("總數…

獨立看門狗---STM32----HAL

基本概念 看門狗解決的問題是什么&#xff1f; 在系統跑飛&#xff08;程序異常執行&#xff09;的情況&#xff0c;是系統復位&#xff0c;程序重新執行。 獨立看門狗適應用于需要看門狗作為一個在主程序之外能夠完全獨立工作&#xff0c;并且對時間精度要求低的場合。 工…