日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

android- 9patch

發布時間:2025/3/20 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android- 9patch 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
所謂"*.9.png"這是Android os里所支持的一種特殊的圖片格式,用它可以實現部分拉伸;這種圖片是經過”9妹“進行特殊處理過的,如果不處理的話,直接用PNG圖就會有失真,拉伸不正常的現象出現。

NinePatch圖片以*.9.png結尾,和普通圖片的區別是四周多了一個邊框(如下圖所示):

????????????????????????????????

???????? 如上圖所示,左邊那條黑色線代表圖片垂直拉伸的區域,上邊的那條黑色線代表水平拉伸區域,右邊的黑色線代表內容繪制的垂直區域,下邊的黑色線代表內容繪制的水平區域,右邊和下邊的線是可選的,左邊和上邊的線不能省略。

??????? 采用NinePatch圖片做背景,可使背景隨著內容的拉伸(縮小)而拉伸(縮小)。那么如何將普通的PNG圖片編輯為NinePatch圖片呢, Android? SDK/tools目錄下提供了編輯器draw9patch.bat,雙擊即可打開,使用起來很簡單了,主要有以下選項:

  • ??Zoom: 用來縮放左邊編輯區域的大小
  • ??Patch scale: 用來縮放右邊預覽區域的大小
  • ??Show lock: 當鼠標在圖片區域的時候顯示不可編輯區域
  • ??Show patches: 在編輯區域顯示圖片拉伸的區域 (使用粉紅色來標示)
  • ??Show content: 在預覽區域顯示圖片的內容區域(使用淺紫色來標示)
  • ??Show bad patches: 在拉伸區域周圍用紅色邊框顯示可能會對拉伸后的圖片產生變形的區域,如果完全消除該內容則圖片拉伸后是沒有變形的,也就是說,不管如何縮放圖片顯示都是良 好的。(實際試發現NinePatch編輯器是根據圖片的顏色值來區分是否為bad patch的,一邊來說只要色差不是太大不用考慮這個設置。)

例子:

NinePatch是一種很有用的PNG圖片格式,它可以在特定區域隨文字大小進行縮放。如下:

從上圖可以看到,背景圖片的中間區域會隨著文字的大小進行縮放。背景圖片是一張NinePatch圖片。?NinePatch圖片可以使用android自帶的draw9patch工具來制作,該工具在SDK安裝路徑的tools目錄下。執行該工具,然后點擊“File”->“open?9-path”打開一張用于制作NinePatch圖片的原來圖片。在畫布的上方和左方的邊上畫線指定縮放區域,
勾選“Show?patches”可顯示畫定的區域,綠色
為固定大小區域,紅色為縮放區域,文字會擺放在紅色
區域。制作完后,點擊“File”??“save?9-path”保存
圖片,draw9patch工具會自動為圖片加上*.9.png后綴。
把制作好的圖片拷貝進項目的res/drawable目錄,然后
編寫代碼。如下:

2:使用

傳 統UI開發中,如果背景的大小不一樣,一般需要為每種大小都 制作一張圖片,這在button中尤為明顯。當然我們也可以一小塊一小塊水平重復的畫,也可 以垂直的話。在android中專門有一種叫nine patch圖片(以 9.png結尾)來解決背景大小不一樣時,只用一張背景圖片。

???? 用自帶的tools\draw9patch.bat 打開一張png圖片,我們可以在png圖片最外面的空格畫一個像素寬的黑線。左邊是編輯區,在左邊的圖中,左邊黑線的高度決定了垂直拉升時的擴展區域,也 即當垂直拉伸時,只有這個區域的圖片會被拉伸。同理圖片上邊的黑線長度決定了水平拉升時的擴展區域。右邊區域是拉升的效果圖,從上之下分別為垂直拉伸,水 平拉伸,以及兩個方向的拉升。該工具提供了所見即所得的nine patch png編輯方式 。

把編輯后的png保存為 9.png到工程目錄的res/drawable目錄下,如果你的9.png中沒有黑線,那么eclipse是會報錯的。

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


NinePatch是一種「可延展」的PNG圖檔。NinePatch圖檔的用途是製作「可隨文字大小縮放」的圖片,如圖1。


圖1: 文字背景可隨著文字大小縮放

NinePatch是很有用的圖片格式,可做為widget的「背景圖」。如圖1的範例,其應用程式的設計如下:

  • 文字部份使用TextView元件
  • 使用TextView的XML attribute來設定文字大小
  • 使用TextView的XML attribute來設定一張背景圖
  • 使用NinePatch圖片做為背景圖,如此一來背景圖就可以隨著文字大小縮放

首先,第一個工作就是「製作NinePatch圖檔」,方式如下。

Step 1. 準備一張原始的PNG圖檔,如圖2。


圖2: 原始PNG圖檔(arrow.png)

Step 2. 啟動Android提供的draw9patch工具,直接執行Android SDK tools/目錄下的draw9patch執行檔即可,如圖3。


圖3: Android SDK提供的draw9patch工具(點擊看原圖)

Step 3. 開啟原始PNG圖檔,編輯圖檔,如圖4。


圖4: 開始編輯圖檔(點擊看原圖)

如何編輯NinePatch圖檔

NinePatch圖檔的製作方式是「繪製二條線」,分別在原始圖檔的上方與左方繪出二條「黑線」,黑線所交集的區域即為「可延展」區域。如下圖的粉紅色區域。


圖5: 定義延展區

「可延展區」是Android框架用來擺放文字的區域,換句話說,文字(TextView)只會被放置在粉紅色區域,並且擺放的原則是「對準粉紅區域的中心點」,即上下置中、左右也置中。非「可延展區」,即綠色部份,並不會隨著文字的大小縮放。所以:

1. 綠色區域是固定大小區域
2. 粉紅色區域是可延展區域、文字擺放於此

圖中的「二條黑線」是怎麼畫出來的呢?方式如下。

Step 4. 移動「Zoom」調整圖檔比例,讓「斑馬線」的大小能適中,如圖6。


圖6: 調整比例

Step 7: 畫黑線

斑馬線是用來畫黑線的區域,怎麼畫黑線呢?用滑鼠點斑馬線就可以了。要怎麼刪除黑線上?按住「Shift」再點斑馬線即可。斑馬線很不好點,所以如果不是要特意訓練操作滑鼠的技巧以及考驗眼力,善用「Zoom」功能可以幫助黑線的繪製。

勾選「Show patches」選項,即可顯示粉紅色區域,如圖7。


圖7: 即時顯示可延展區

在draw9patch的右邊也會有縮放的展示圖。

Step 8: 完成NinePatch圖檔

儲存完成的NinePatch圖檔,draw9patch會自動將圖檔的副檔名儲存為*.9.png。完成NinePatch圖檔後,就可以開始寫程式了。

開始寫程式: HelloNinePatch

範例HelloNinePatch的實作方式如下。

Step 1. 建立一個新的Android專案,命名為HelloNinePatch。

Step 2. 將arrow.9.png托曳(drag)到HelloNinePatch專案裡的「res/drawable」目錄下。如圖1。


圖1: 將arrow.9.png放進res/drawable資料夾

Step 3. 修改UI(res/layout/main.xml),設計出上一篇教學(#30)裡的圖2畫面。main.xml的內容如下。

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="small world" android:textSize="12sp" android:background="@drawable/arrow" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="big world" android:textSize="24sp" android:background="@drawable/arrow" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="super world" android:textSize="48sp" android:background="@drawable/arrow" /> </LinearLayout> ?

轉載于:https://www.cnblogs.com/yangjj08/p/10153668.html

總結

以上是生活随笔為你收集整理的android- 9patch的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。