How to draw a line in android

How to draw a line in android

If you want to have a simple Line in your Layout to separate two views you can use a generic View with the height and width you want the line to have and a set background color.

With this approach you dont need to override a View or use a Canvas yourself just simple and clean add the line in xml.

<View
 android_layout_width=match_parent
 android_layout_height=1dp
 android_background=@android:color/black />

The example code I provided will generate a line that fills the screen in width and has a height of one dp.

If you have problems with the drawing of the line on small screens consider to change the height of the line to px. The problem is that on a ldpi screen the line will be 0.75 pixel high. Sometimes this may result in a rounding that makes the line vanish. If this is a problem for your layout define the width of the line a ressource file and create a separate ressource file for small screens that sets the value to 1px instead of 1dp.

This approach is only usable if you want horizontal or vertical lines that are used to divide layout elements. If you want to achieve something like a cross that is drawn into an image my approach will not work.

This one draws 2 lines which form a cross on the top left of the screen:

DrawView.java

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();

    private void init() {
        paint.setColor(Color.BLACK);
    }

    public DrawView(Context context) {
        super(context);
        init();
    }

    public DrawView(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    public DrawView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        init();
    }

    @Override
    public void onDraw(Canvas canvas) {
            canvas.drawLine(0, 0, 20, 20, paint);
            canvas.drawLine(20, 0, 0, 20, paint);
    }

}

The activity to start it:

StartDraw.java

import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;

public class StartDraw extends Activity {
    DrawView drawView;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        drawView = new DrawView(this);
        drawView.setBackgroundColor(Color.WHITE);
        setContentView(drawView);

    }
}

How to draw a line in android

There are two main ways you can draw a line, by using a Canvas or by using a View.

Drawing a Line with Canvas

From the documentation we see that we need to use the following method:

drawLine (float startX, float startY, float stopX, float stopY, Paint paint)

Here is a picture:

canvas.drawLine

The Paint object just tells Canvas what color to paint the line, how wide it should be, and so on.

Here is some sample code:

private Paint paint = new Paint();
....

private void init() {
    paint.setColor(Color.BLACK);
    paint.setStrokeWidth(1f);
}

@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);

    startX = 20;
    startY = 100;
    stopX = 140;
    stopY = 30;

    canvas.drawLine(startX, startY, stopX, stopY, paint);
}

Drawing a Line with View

If you only need a straight horizontal or vertical line, then the easiest way may be to just use a View in your xml layout file. You would do something like this:

<View
    android_layout_width=match_parent
    android_layout_height=1dp
    android_background=@android:color/black />

Here is a picture with two lines (one horizontal and one vertical) to show what it would look like:

drawing

And here is the complete xml layout for that:

<?xml version=1.0 encoding=utf-8?>
<LinearLayout xmlns_android=http://schemas.android.com/apk/res/android
android_layout_width=match_parent
android_layout_height=match_parent
android_orientation=vertical >

<TextView
    android_layout_width=match_parent
    android_layout_height=wrap_content
    android_padding=10dp
    android_text=TextView1 in vertical linear layout />

<View
    android_layout_width=match_parent
    android_layout_height=1dp
    android_background=@android:color/black />

<TextView
    android_layout_width=match_parent
    android_layout_height=wrap_content
    android_padding=10dp
    android_text=TextView2 in vertical linear layout />

<LinearLayout
    android_layout_width=match_parent
    android_layout_height=wrap_content >

    <TextView
        android_layout_width=100dp
        android_layout_height=100dp
        android_padding=10dp
        android_text=TextView3 in horizontal linear layout />

    <View
        android_layout_width=1dp
        android_layout_height=match_parent
        android_background=@android:color/black />

    <TextView
        android_layout_width=100dp
        android_layout_height=100dp
        android_padding=10dp
        android_text=TextView4 in horizontal linear layout />
</LinearLayout>

</LinearLayout>

Leave a Reply

Your email address will not be published. Required fields are marked *