Рисование границы с помощью пользовательского просмотра Android
-
05-10-2019 - |
Вопрос
Я пытаюсь нарисовать пользовательскую границу, рисуя пользовательский вид. Вот образец одной стороны границы:
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);
}
}
А другая сторона определена почти так же. XML определяется как таковой:
<?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>
Проблема в том, что границы вообще не отображаются. Фон показывает, но ничего больше.
Решение
От Руководство по разработке «Строительство пользовательских компонентов», При создании пользовательского представления оно будет установлен размер 100x100, пока не укажете иное. Посмотрите, есть ли что-то связанное с проблемой, которую вы видите.
«Вы почти наверняка хотите переопределить
onMeasure()
и также могут потребоваться переопределитьonDraw()
Если вы хотите, чтобы компонент что-то показать. Пока оба имеют поведение по умолчанию, по умолчаниюonDraw()
ничего не сделаю, а по умолчаниюonMeasure()
Всегда установит размер 100x100 - что, вероятно, не то, что вы хотите. "