Zeichnen einer Grenze eine benutzerdefinierte Ansicht mit Android
-
05-10-2019 - |
Frage
Ich versuche, indem eine benutzerdefinierte Ansicht eine benutzerdefinierte Grenze zu ziehen. Hier ist ein Beispiel von einer Seite der Grenze:
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);
}
}
Und die andere Seite ist so ziemlich die gleiche Art und Weise definiert. Die XML wird als solche definiert:
<?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>
Das Problem ist, werden die Grenzen gar nicht angezeigt werden. Hintergrund zeigt, aber sonst nichts.
Lösung
der "Building Benutzerdefinierte Komponenten" dev Führer , wenn eine benutzerdefinierte Ansicht erstellen, wird es eine festgelegte Größe von 100x100 haben, bis Sie nichts anderes angeben. Prüfen Sie, ob dies etwas mit dem Thema zu tun hat Sie sehen.
"Sie wollen mit ziemlicher Sicherheit
onMeasure()
außer Kraft zu setzen und sind wahrscheinlich auch nach Bedarf außer Kraft zu setzenonDraw()
, wenn Sie die Komponente zu zeigen etwas wollen. Während beiden Standardverhalten haben, ist der StandardonDraw()
wird nichts tun, und der StandardonMeasure()
wird immer gesetzt eine Größe von 100x100 -. das ist wahrscheinlich nicht das, was Sie wollen "