Рисование границы с помощью пользовательского просмотра Android

StackOverflow https://stackoverflow.com/questions/3799887

  •  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 - что, вероятно, не то, что вы хотите. "

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top