2011-02-02 1 views
1

Je dessine 4 lignes (canvas.drawLine) afin de dessiner un rectangle. Est-il possible de remplir la zone du rectangle? (Je sais que Android a un rectDraw.Min est seulement la curiosité)onDraw remplir forme créer avec canvas.drawLine

merci d'avance.


ok .. J'ai également créé un segment de chemin. Suivant le code .. S'il vous plaît pouvez-vous expliquer comment remplir la zone interne?

`Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);    
    paint.setStrokeWidth(2); 
    paint.setColor(android.graphics.Color.RED); 
    paint.setStyle(Paint.Style.FILL_AND_STROKE); 
    paint.setAntiAlias(true); 
    path.reset(); 
    path.setFillType(Path.FillType.INVERSE_EVEN_ODD);  
    path.moveTo(mPin[0].getX() + 10, mPin[0].getY() + 10); 
    path.lineTo(mPin[1].getX() + 10, mPin[1].getY() + 10); 

    path.moveTo(mPin[1].getX() + 10, mPin[1].getY() + 10); 
    path.lineTo(mPin[3].getX() + 10, mPin[3].getY() + 10); 

    path.moveTo(mPin[3].getX() + 10, mPin[3].getY() + 10); 
    path.lineTo(mPin[2].getX() + 10, mPin[2].getY() + 10); 

    path.moveTo(mPin[2].getX() + 10, mPin[2].getY() + 10); 
    path.lineTo(mPin[0].getX() + 10, mPin[0].getY() + 10); 
    paint.setShader(new LinearGradient(0, 0, 0, getHeight(), Color.BLACK, Color.WHITE, Shader.TileMode.MIRROR)); 
    c.drawPath(path, paint);` 

Répondre

2

Vous pouvez remplir le rect si vous avez dessiné vos segments de ligne comme chemin. Mais pour remplir une zone délimitée par quatre segments de lignes non connectés mais se croisant, je pense que vous devrez écrire votre propre routine. Rechercher "remplissage d'inondation" ou "remplissage de semences".

+0

merci, je vais jeter un coup d'oeil. – Blackbelt

1

N'utilisez drawLine mais, créer un objet Path:

protected void onDraw(Canvas canvas) { 


    Paint paint = new Paint(); 
    paint.setStyle(Paint.Style.FILL); 
    paint.setColor(Color.parseColor("#FFA800")); 


    Path path = new Path(); 

    path.moveTo(0, 0); 
    path.lineTo(getWidth()/2, 0); 
    path.lineTo(getWidth(), getHeight()/2); 
    path.lineTo(getWidth()/2, getHeight()); 
    path.lineTo(0, getHeight()); 
    path.lineTo(0, 0); 

    canvas.drawPath(path, paint); 

} 
+0

Merci pour votre réponse! – Blackbelt