【问题标题】:Drawing a border using a custom view Android使用自定义视图Android绘制边框
【发布时间】:2010-09-26 21:24:04
【问题描述】:

我正在尝试通过绘制自定义视图来绘制自定义边框。这是边框一侧的示例:

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>

问题是,边框根本没有出现。背景显示,但没有其他内容。

【问题讨论】:

    标签: android custom-view


    【解决方案1】:

    the "Building Custom Components" dev guide 开始,在创建自定义视图时,它将设置为 100x100 的大小,除非您另行指定。看看这是否与您看到的问题有关。

    “您几乎肯定会想要覆盖onMeasure(),并且如果您希望组件显示某些内容,也可能需要覆盖onDraw()。虽然两者都有默认行为,但默认onDraw()不会做任何事情,并且默认的 onMeasure() 将始终设置为 100x100 的大小——这可能不是你想要的。”

    【讨论】:

    • 万岁!谢谢你。我会投票赞成你的答案,但我的声望不够高。
    • 如果它解决了问题,您可以将答案标记为已接受的答案。 ;-)