Android designed to run across many devices with different screen sizes and display resolutions. One of the things that confuse many new Android developers is how to support multiple screen sizes. For making SUSI Android app more user-friendly and interactive we used a lot of images in the form of drawable resources. Most of these drawables are in the form of PNG (Portable Network Graphic) and to support multiple screen size we have to include separate images of varied dimensions because we can’t scale PNG images without losing quality.
Other disadvantages of using PNG images are
- PNG images take large disk space.
- PNG images have fixed colour and dimensions which cannot be changed.
To overcome these shortcomings of PNG image we decided to use vector images in SUSI Android.
Advantages of using vector image are
- It is smaller in size as compared to PNG i.e it takes less disk space than PNG.
- It can be scaled without losing quality. So we need to include only a single image for all screen size.
Disadvantages of using vector image are
- Reconstruction of vector data may take considerably longer than that contained in a bitmap file of equivalent complexity because each image element must be drawn individually and in sequence.
- Vector image can’t be used to display complex photographs.
- If the object consists of a large number of small elements then file size grow very fast.
Vector produce smaller size file than bitmap only for simple stuff. When it comes to creating a photographic quality vector where colour information is paramount and may vary on a pixel-by-pixel basis, the file can be much larger than its bitmap version, that’s why vector image is only suitable for small images like logo designs, icons etc.
In this blog post, I will show you how we used vector images in SUSI Android.
How to create vector image using Asset Studio tool
Asset Studio is inbuilt Android Studio tool which we use to create a vector image from default material icon or local SVG images. To use vector asset in Android Studio
- Go to File> New > Vector Asset
- Vector Asset Studio Tool Window is prompted
- Create vector image from default material icon or local SVG image.
Asset Studio will add icon in drawable. It can be used anywhere in the project.
Vector images in SUSI Android
In SUSI Android all drawable images like search, mic, arrow, check etc are vector images, even the logo of the app is a vector image.
This vector image is the result of code you can find here.
Now I will describe some special attributes used here
- fillColor: It defines the colour of the image. So the colour of your image depends on the colour you provide in fillColor. We used white color(#ffffff) as fillColor that’s why the image is white in colour.
- strokeColour: It defines the colour of boundary of the image.
- pathData: Shape of your image depends on pathData. Different commands used in pathData are
- M: It is used to define the starting point. For example, M10,10 means starting Coordinate of the image will be (10,10). M used for absolute position and m for relative position.
- L: L means to draw a line from the current position to given position. For example, M10,10 L20,20 means a straight line will be drawn from coordinate (10,10) to coordinate (20,20. L Use for absolute position and l for relative position.
- C: C means to draw an arc. For example, Cx1,x2 x3,x4 x5,x6 means draw a curve (cubic Bezier curve) from coordinate (x1,x2) using (x3,x4) as control point at the beginning and (x5,x6) as control point at the end.
- Z: Z means to close the path using the straight line between the current position and starting position.
Example
Let’s consider a curve
M9,16.17L4.83,12l-1.42,1.41L9,19 21,7l-1.41,-1.41z |
It starts from point (9,16.17). From (9,16.17) to (4.83,12) a straight line will be drawn. Now again a straight will be drawn from point (4.83,12) to the relative point (-1.42,1.41). After that from point (-1.42, 1.41) it will draw a polyline like an upward arrow(^) with the end point at (21,7). Again it will draw a straight line between point (21,7) and relative point (-1.41, -1.41). At the last z will close curve using the straight line between current point and starting point).
Resources
- Main site link of Vector Asset Studio: https://developer.android.com/studio/write/vector-asset-studio.html
- Main site link of SVG: https://www.w3.org/Graphics/SVG/
- Blog on Android working with vector drawables: https://www.androidhive.info/2017/02/android-working-svg-vector-drawables/
Tags