iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 8
2
Software Development

Android animation 30天上手系列 第 8

Day08 ShapeDrawable繪圖

講到動畫,我們得來講一下怎麼繪圖。有時候,我們不會直接使用jpg、png這樣的圖片。在android為了支援不同螢幕解析度,必須制作多個不同大小的圖片,這會讓app的檔案大小變大。其實有些圖片我們是可以自已繪制出來的,繪制出來的檔案很小且支援各種螢幕大小。寫起來不難,我們就來看看這篇要介紹的ShapeDrawable。

產生ShapeDrawable

在drawable 新增 rectangle.xml,就可以把rectangle.xml當成圖片來使用

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <solid android:color="#a4b6fa" />
</shape>

使用ShapeDrawable

在activity_main.xml直接把Layout的background設定為剛剛新增的rectangle.xml

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@drawable/rectangle"
    android:padding="10dp"
    android:text="Rectangle"
    android:textSize="24sp" />

shape 形狀

除了剛剛的矩形,還可以設定圓形、線、環形

rectangle:矩形
oval:圓形
line:線
ring:環形

shape

Shape 裡的其他屬性

solid:設定shape填充的類色

<shape
    android:shape="rectangle">
    <solid android:color="#a4b6fa" />
</shape>

corners:設定圓角

corners

<shape
    android:shape="rectangle">
    <solid android:color="#a4b6fa" />
    <corners android:radius="15dp" />
</shape>

gradient:設定漸層

gradient

<gradient
    android:gradientRadius="50dp"
    android:startColor="#0de1c5"
    android:type="linear"
    android:endColor="#083ff5"
    />

stroke:設定邊框線

stroke

<stroke
    android:color="#f20101"
    android:width="2dp"
    android:dashGap="0dp"
    android:dashWidth="0dp"
    />

stroke 屬性
android:color 邊框線的顏色
android:width 邊框線的寬度
android:dashWidth 設定虛線的高度
android:dashGap 設定虛線間的空隙,0為實線

padding:設定內容與形狀邊界的內距

<padding
        android:bottom="10dp"
        android:left="10dp"
        android:right="10dp"
        android:top="10dp" />

size 設定大小

<size
        android:width="150dp"
        android:height="150dp" />

大部分情況,我們不會指定大小,而是依照使用這個Drawable的view來決定。例如設定button的背景,這個drawable大小就不該被指定,而是依button的大小來決定。

只用xml來繪圖當然是不夠的,下一篇將介紹另一種繪圖方式Canvas。


上一篇
Day07 Property animation 進階
下一篇
Day09 Canvas 繪圖
系列文
Android animation 30天上手30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言