2011-10-16 19 views
74

he definido una clase de esa manera:propio diseño definido, el método onDraw() no recibiendo llamadas

public class TestMyFrameLayout extends FrameLayout{ 

    Paint mPaint; 
    public TestMyFrameLayout(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    public TestMyFrameLayout(Context context) { 
     super(context); 
     mPaint = new Paint(); 
     mPaint.setColor(Color.GREEN); 
    } 

    protected void onDraw(Canvas canvas) { 
     super.onDraw(canvas); 
     canvas.drawCircle(50f, 50f, 30, mPaint); 
    } 
} 

y lo llamó gustaría:

TestMyFrameLayout myFrameLayout = new TestMyFrameLayout(this); 
LayoutParams myFrameLayoutParams = new LayoutParams(300,300); 
myFrameLayout.setLayoutParams(myFrameLayoutParams); 
setContentView(myFrameLayout); 

pero en realidad TestMyFrameLayout.onDraw (Lona) la función no se llama, ¿por qué?

+0

¿Podría mostrar el código donde lo usa? También agregue '@ Override' antes de onDraw: esto comprobará si hay errores en eclipse. –

+2

Gracias Laurent '. Mi problema ya está resuelto Agregue this.setWillNotDraw (falso); –

Respuesta

173

Resuelto. Agregue this.setWillNotDraw(false); en el constructor

+17

¡Pudo haber sido solo un desarrollador angustiado que lo configuró en true de forma predeterminada! –

+1

¿por qué esto ayudaría? – RyanShao

+4

@RyanShao para ViewGroups se establece en true de manera predeterminada. – ataulm

Cuestiones relacionadas