Drawing in Android
last modified October 29, 2012
In this chapter of the Android development tutorial we will do some drawing. The Android framework API provides 2D drawing API that allows to render custom graphics.
We can either draw directly on a Canvas object or to modify
existing Views to customise their look and feel. Drawing
is performed in the onDraw() method. Simple graphics
can be created in the layout XML file too.
We use the Canvas object to perform drawing. A Canvas is
an object that has drawing methods to do the drawing. Actual drawing
happens in a Bitmap that is placed into a window.
The Paint class holds the style and colour information about
how to draw geometries, text and bitmaps.
A Drawable is an object that can be drawn. Unlike a View,
a Drawable does not have any facility to receive events or otherwise
interact with the user.
Oval shape
We are going to draw a circle on a View. The circle is defined in
an XML file. The manifest file does not need to be modified.
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<solid
android:color="#666666"/>
<size
android:width="70dp"
android:height="70dp"/>
</shape>
In the oval.xml file we create a circle shape. We define its colour and size.
The oval.xml file is located in the res/drawable
directory. The directory had to be created.
<?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"
>
<View
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_marginTop="5dp"
android:background="@drawable/oval"
/>
</LinearLayout>
In the main.xml file, we define a View. The background
of this view is filled with our drawable object.
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">OvalShape</string>
</resources>
Resources file.
package com.zetcode.ovalshape;
import android.app.Activity;
import android.os.Bundle;
public class MainActivity extends Activity
{
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
}
The file just loads the defined layout.
Drawing a rectangle
In the second example, we will draw a rectangle on a View.
It will be drawn in the onDraw() method of the View.
Since we will be drawing on an existing View, we will
have a predefined Canvas with its Bitmap. We do not need to
worry about them. The manifest file is not modified. In this
example the main.xml file will not be needed.
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">DrawRect</string>
</resources>
Resources.
package com.zetcode.drawrect;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.View;
public class DrawView extends View
{
Paint paint = new Paint();
public DrawView(Context context)
{
super(context);
paint.setColor(Color.GREEN);
}
@Override
public void onDraw(Canvas canvas)
{
canvas.drawRect(30, 30, 100, 100, paint);
}
}
We have a custom DrawView class. The file is located in
the src/com/zetcode/drawrect/ directory.
public class DrawView extends View
The custom DrawView class inherits from the base View class.
Paint paint = new Paint();
An instance of the Paint class is created. It will define a colour
for drawing.
paint.setColor(Color.GREEN);
We will paint in green colour.
@Override
public void onDraw(Canvas canvas)
{
canvas.drawRect(30, 30, 100, 100, paint);
}
The drawing is performed in the onDraw() method. The method provides
the Canvas object for us. We call the drawRect() to
draw the rectangle on the View.
package com.zetcode.drawrect;
import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
public class MainActivity extends Activity
{
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
DrawView drawView = new DrawView(this);
drawView.setBackgroundColor(Color.WHITE);
setContentView(drawView);
}
}
In the MainActivity.java source file we set the custom DrawView
to be the content View of the Activity.
DrawView drawView = new DrawView(this);
We create an instance of the DrawView class.
drawView.setBackgroundColor(Color.WHITE);
We specify the background colour for the View.
setContentView(drawView);
The DrawView becomes the content View of the Activity.
In this chapter of the Android development tutorial, we did dome basic drawing.