0

我创建了一个简单的自定义视图,它是一个矩形。我可以将它添加到我的布局中,但不能更改它在类中定义的颜色。

我的课:

package com.example.customview;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.util.AttributeSet;
import android.view.Display;
import android.view.View;
import android.view.WindowManager;

public class CustomRect extends View {

    Rect rect;
    Paint blue;

    public void init() {

        rect = new Rect(0, 0, 200, 200);
        blue = new Paint();
        blue.setColor(Color.BLUE);
        blue.setStyle(Paint.Style.FILL);
    }

    public CustomRect(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);

        init();
    }

    public CustomRect(Context context, AttributeSet attrs) {
        super(context, attrs);

        init();
    }

    public CustomRect(Context context) {
        super(context);

        init();
    }

    @Override
    protected void onDraw(Canvas canvas) {

        super.onDraw(canvas);

        canvas.drawRect(rect, blue);

        invalidate();
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        // TODO Auto-generated method stub
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);

        setMeasuredDimension(200, 200);
    }   
}

我的活动:

package com.example.customview;
import android.app.Activity;
import android.os.Bundle;

public class RectActivity extends Activity{

    CustomRect rect;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);

        rect = new CustomRect(this);
        setContentView(rect);
    }
}

我的布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <view
        android:id="@+id/thisId"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        class="com.example.customview.CustomRect" />

</LinearLayout>

如果有人有任何想法这样做。谢谢。

4

1 回答 1

1

从您的 onDraw() 中删除 invalidate()。其他类应使用 invalidate() 向 Android 指示应重绘您的自定义视图。

[编辑]

要从 XML 更改您使用的颜色,请添加自定义属性。请参阅此问题中的答案:

使用 XML 声明一个自定义的 android UI 元素

于 2012-10-14T11:19:40.760 回答