系統定義了幾個標準的DPI值,作為手機的固定DPI
密度 | ldpi | mdpi | hdpi | xhdpi | xxhdpi |
---|---|---|---|---|---|
密度值 | 120 | 160 | 240 | 320 | 480 |
分辨率 | 240×320 | 320×480 | 480×800 | 720×1280 | 1080×1920 |
注:此表僅供參考,如小米4c手機,分辨率1920×1080,尺寸5英寸,屏幕像素密度441ppi。因在具體應用中1dp = 3px,故密度為xxhdpi
由于各種屏幕密度的不同,導致同樣像素大小的長度,在不同密度的屏幕上顯示長度不同 Android系統使用mdpi的屏幕作為標準,在這個屏幕上1px = 1dp 例如同樣是100dp的長度,在mdpi中為100px,而在hdpi中為150px 在hdpi中1dp = 1.5px,在xhdpi中1dp = 2px,在xxhdpi中1dp = 3px
可將dp、sp轉換為px的工具類保存到項目中
系統通過提供的Canvas對象來提供繪圖方法,如drawPoint
(點)、drawLine
(直線)、drawLines
(多條直線)、drawRect
(矩形)、drawRoundRect
(圓角矩形)、drawCircle
(圓)、drawVertices
(多邊形)、drawArc
(弧形或扇形)、drawOval
(橢圓)、drawText
(文本)、drawPosText
(指定位置文本)、drawPath
(路徑)等等,例
例子:通過漸變實現陰影效果
<?xml version="1.0" encoding="uft-8"?><shape xmlns:android="http://schemas.android.com/apk/res/android" // 默認為rectangle android:shape="rectangle"> <corners // 當shape="rectangle"時使用 // 半徑,會被topLeftRadius等單個半徑屬性覆蓋,默認為1dp android:radius="8dp"/> <gradient // 漸變 android:startColor="#FF5DA2FF" android:endColor="#805FBBFF" android:angle="45"/> <padding android:left="7dp" android:top="7dp" android:right="7dp" android:bottom="7dp"/></shape>Selector的作用在于幫助開發者實現靜態繪圖中的事件反饋,通過給不同的事件設置不同的圖像,從而在程序中根據用戶輸入,返回不同的效果
<?xml version="1.0" encoding="uft-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android"> <!-- 默認時的背景圖片 --> <item android:drawable="@drawable/X1" /> <!-- 沒有焦點時的背景圖片 --> <item android:state_window_focused="false" android:drawable="@drawable/X2" /> <!-- 非觸摸模式下獲得焦點并單擊時的背景圖片 --> <item android:state_focused="true" android:state_4. Android繪圖技巧Canvas.save()
:保存畫布,將之前的所有已繪制圖像保存起來,讓后續的操作就好像在一個新的圖層上操作一樣Canvas.restore()
:合并圖層操作,將在save()
之后繪制的所有圖像與save()
之前的圖像進行合并Canvas.translate()
:畫布平移,即坐標系平移。在調用translate(x, y)
方法之后,則將原點(0, 0)移動到了(x, y),之后的所有繪圖操作都將以(x, y)為原點執行Canvas.rotate()
:畫布翻轉,即坐標系翻轉,將坐標系旋轉一定的角度Android通過調用saveLayer()
方法、saveLayerAlpha()
方法將一個圖層入棧,使用restore()
方法、restoreToCount()
方法將一個圖層出棧。入棧的時候,后面所有的操作都發生在這個圖層上,而出棧的時候,則會把圖像繪制到上層Canvas上。
(待續……)
新聞熱點
疑難解答