Domanda

Sto cercando di tracciare un bordo personalizzato disegnando una visualizzazione personalizzata. Ecco un esempio di un lato del confine:

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

}

E l'altro lato è definito più o meno allo stesso modo. L'XML è definito come tale:

<?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>

Il problema è che i confini non vengono visualizzati affatto. Lo sfondo spettacoli, ma nient'altro.

È stato utile?

Soluzione

il "Costruire Componenti Custom" guida dev , quando si crea una visualizzazione personalizzata, avrà una dimensione insieme di 100x100 fino a quando non diversamente specificato. Vedere se questo ha qualcosa a che fare con il problema che si sta vedendo.

  

"Sarà quasi certamente desidera ignorare onMeasure() e sono anche suscettibili di necessità di sostituzione onDraw() se si desidera che il componente di mostrare qualcosa. Anche se entrambi hanno un comportamento di default, il onDraw() predefinita non fa nulla, e il onMeasure() di default sarà sempre impostato una dimensione di 100x100 -., che probabilmente non è ciò che si vuole "

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top