2017-09-27 6 views
0

J'essaie de dessiner un arrière-plan personnalisé sur mon CustomView qui étend LinearLayout.Problèmes de dessin d'arrière-plan personnalisé sur Canvas (Android)

Voici ma méthode onDraw():

int mPositionX = 0; 
int mPositionY = 0; 
final int viewWidth = getMeasuredWidth(); 
final int viewHeight = getMeasuredHeight(); 

mPath.moveTo(mPositionX, mPositionY); 
mPositionX = viewWidth; 
mPath.lineTo(mPositionX, mPositionY); 
mPositionY = viewHeight; 
mPath.lineTo(mPositionX, mPositionY); 

//draw bottom triangles 
for(int i = 0; mPositionX >= 0; i++){ 
    mPositionX -= HALF_BORDER_STEP; 
    mPositionY = i%2 == 0 ? mPositionY - BORDER_HEIGHT : mPositionY + BORDER_HEIGHT; 
    mPath.lineTo(mPositionX, mPositionY); 
} 

// move to left bottom corner 
mPositionX = 0; 
mPath.lineTo(mPositionX,mPositionY); 
mPath.close(); 

canvas.clipPath(mPath); 
canvas.drawPath(mPath, mCheckPaint); 
super.draw(canvas); 

J'ai 2 problèmes. Tout d'abord, mon arrière-plan personnalisé ne s'affiche pas si je ne définirai pas d'arrière-plan, donc j'ai fait android: background = "@ color/transparent" dans mon xml.

Deuxième problème est que, après avoir ajouté quelques vues via .addView(View view), mon fond disparaît.

J'ai essayé d'appeler invalidate() mais toujours rien.

Qu'est-ce que je fais de mal?

Répondre

0

Pour résoudre mon problème, j'aurais dû ajouter setWillNotDraw(false); ce qui signifie que mon View se dessine tout seul. Android Dev Docs. Après cela, j'ai manqué une autre méthode d'appel: mPath.reset(); juste avant de redessiner dans mon onDraw(Canvas canvas); Voilà.