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 に答える