2012-10-14 2 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()를 제거하십시오. 다른 클래스는 사용자 정의보기를 다시 그려야한다는 것을 Android에 알리기 위해 invalidate()를 사용해야합니다.

[편집]

당신이 XML에서 사용하는 색상을 변경하려면 사용자 정의 속성을 추가 할 수 있습니다. 이 질문에 답변을 참조하십시오 :

Declaring a custom android UI element using XML

+0

좋아, 감사합니다 ..... –

+0

은 당신의 문제가 해결 되었습니까? – Simon

+0

죄송합니다. 오해가있는 것 같습니다. 파란 색으로 잘 작동합니다. 하지만 내가 원할 때마다 xml에서 그것을 어떻게 바꿀 것인가. 감사. –

관련 문제