I'm trying to draw a custom border by drawing a custom view. Here is a sample of one side of the border:
package com.sparkydev.guessaphrase;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.drawable.ShapeDrawable;
import android.graphics.drawable.shapes.RectShape;
import android.util.AttributeSet;
import android.view.View;
public class LeftBorder extends View {
private ShapeDrawable vertRect, horizRect;
public LeftBorder(Context context, AttributeSet attributeset) {
super(context, attributeset);
int width = this.getWidth();
int height = this.getHeight();
vertRect = new ShapeDrawable(new RectShape());
vertRect.getPaint().setColor(Color.RED);
vertRect.setBounds(0, 0, width/10, height);
horizRect = new ShapeDrawable(new RectShape());
horizRect.getPaint().setColor(Color.RED);
horizRect.setBounds(0, 0, width, height/9);
}
protected void onDraw(Canvas canvas){
vertRect.draw(canvas);
horizRect.draw(canvas);
}
}
And the other side is defined pretty much the same way. The XML is defined as such:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/wallpaper">
<!-- Declares left border's position, which is
drawn programmatically.-->
<com.sparkydev.guessaphrase.LeftBorder
开发者_运维百科 android:id="@+id/leftborder"
android:layout_alignParentLeft="true"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
<!-- Used a FrameLayout to contain
the menu buttons.-->
<FrameLayout
android:id="@+id/FrameLayout01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
>
<!-- Menu buttons -->
</FrameLayout>
<!-- Declares right border position (on right
of screen, below the left border) -->
<com.sparkydev.guessaphrase.RightBorder
android:layout_alignParentRight="true"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@id/leftborder"
/>
</RelativeLayout>
The problem is, the borders are not showing up at all. The background shows, but nothing else.
From the "Building Custom Components" dev guide, when creating a custom view, it will have a set size of 100x100 until you specify otherwise. See if this has anything to do with the issue you are seeing.
"You will almost certainly want to override
onMeasure()
and are also likely to need to overrideonDraw()
if you want the component to show something. While both have default behavior, the defaultonDraw()
will do nothing, and the defaultonMeasure()
will always set a size of 100x100 — which is probably not what you want."
精彩评论