2012-10-14 107 views
0

我創建了一個矩形的簡單自定義視圖。我可以將它添加到我的佈局中,但不能更改它在類中定義的顏色。將屬性添加到android中的自定義控件

我的課:

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> 

如果任何人有任何想法做。謝謝。

回答

1

從你的onDraw()中刪除invalidate()。其他類應該使用invalidate()向Android表明您的自定義視圖應該重繪。

[編輯]

更改你的XML使用的顏色,添加自定義屬性。一看便知這個問題:

Declaring a custom android UI element using XML

+0

好的,謝謝..... –

+0

它是否解決問題了嗎? – Simon

+0

對不起,這似乎有一個誤解。它對藍色效果很好。但是如何隨時從xml中改變它。謝謝。 –