Rectangle de dessin du canevas Android

105

comment dessiner un rectangle vide avec etc. borderWidth = 3 et borderColor = noir et une partie dans le rectangle n'ont pas de contenu ni de couleur. Quelle fonction dans Canvas utiliser

void drawRect(float left, float top, float right, float bottom, Paint paint)

void drawRect(RectF rect, Paint paint)

void drawRect(Rect r, Paint paint)

Merci.

J'essaye cet exemple

Paint myPaint = new Paint();
myPaint.setColor(Color.rgb(0, 0, 0));
myPaint.setStrokeWidth(10);
c.drawRect(100, 100, 200, 200, myPaint);

Il dessine un rectangle et le remplit de couleur noire mais je veux juste "encadrer" comme cette image:

entrez la description de l'image ici

Kec
la source

Réponses:

158

Essayez paint.setStyle(Paint.Style.STROKE)?

Pandur
la source
124

En supposant que "une partie dans le rectangle n'a pas de couleur de contenu " signifie que vous voulez des remplissages différents dans le rectangle; vous devez dessiner un rectangle dans votre rectangle, puis avec une largeur de trait de 0 et la ou les couleurs de remplissage souhaitées.

Par exemple:

DrawView.java

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.View;

public class DrawView extends View {
    Paint paint = new Paint();

    public DrawView(Context context) {
        super(context);            
    }

    @Override
    public void onDraw(Canvas canvas) {
        paint.setColor(Color.BLACK);
        paint.setStrokeWidth(3);
        canvas.drawRect(30, 30, 80, 80, paint);
        paint.setStrokeWidth(0);
        paint.setColor(Color.CYAN);
        canvas.drawRect(33, 60, 77, 77, paint );
        paint.setColor(Color.YELLOW);
        canvas.drawRect(33, 33, 77, 60, paint );

    }

}

L'activité pour le démarrer:

StartDraw.java

import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;

public class StartDraw extends Activity {
    DrawView drawView;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        drawView = new DrawView(this);
        drawView.setBackgroundColor(Color.WHITE);
        setContentView(drawView);

    }
}

... se révélera de cette façon:

entrez la description de l'image ici

DonGru
la source
En fait, c'est ce dont j'ai besoin screencast.com/t/oFYF5kGtw5B ce rectangle rouge après avoir dessiné tout juste pour ajouter ce rectangle est-ce possible?
Kec
21
C'est la solution paint.setStyle (Style.STROKE); Merci pour l'aide.
Kec
Je pense que DonGru et Juan ont donné une excellente explication ici ... mais la réponse exacte en une ligne à ce que l'auteur demande a été fournie ci-dessous par @Yuck - paint.setStyle (Paint.Style.STROKE)
alchimiste
Cette réponse ne correspond pas à la réponse. Cela ne montre pas la réponse correcte. La réponse de Pandur est la bonne.
Sonhja
12
//white background
canvas.drawRGB(255, 255, 255);
//border's properties
paint.setColor(Color.BLACK);
paint.setStrokeWidth(0);        
paint.setStyle(Paint.Style.STROKE);         
canvas.drawRect(100, 100, 200, 200, paint);
Cristopher Loli
la source
7

Créez une nouvelle classe MyView, Which extends View. Remplacez la onDraw(Canvas canvas)méthode sur laquelle dessiner un rectangle Canvas.

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.util.AttributeSet;
import android.view.View;

public class MyView extends View {

 Paint paint;
 Path path;

 public MyView(Context context) {
  super(context);
  init();
 }

 public MyView(Context context, AttributeSet attrs) {
  super(context, attrs);
  init();
 }

 public MyView(Context context, AttributeSet attrs, int defStyle) {
  super(context, attrs, defStyle);
  init();
 }

 private void init(){
  paint = new Paint();
  paint.setColor(Color.BLUE);
  paint.setStrokeWidth(10);
  paint.setStyle(Paint.Style.STROKE);

 }

 @Override
 protected void onDraw(Canvas canvas) {
  // TODO Auto-generated method stub
  super.onDraw(canvas);

  canvas.drawRect(30, 50, 200, 350, paint);
  canvas.drawRect(100, 100, 300, 400, paint);
  //drawRect(left, top, right, bottom, paint)

 }

}

Ensuite, déplacez votre activité Java à l' setContentView()aide de notre vue personnalisée, MyView.

    public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(new MyView(this));
  }

Pour plus de détails, vous pouvez visiter ici

http://developer.android.com/reference/android/graphics/Canvas.html

IntelliJ Amiya
la source
6
paint.setStrokeWidth(3);

paint.setColor(BLACK);

et l'un ou l'autre de vos drawRectdevrait fonctionner.

Kenny Lim
la source
0

Je ne sais pas si c'est trop tard, mais la façon dont j'ai résolu ce problème a été de dessiner quatre rectangles minces qui, ensemble, formaient une grande bordure. Dessiner la bordure avec un rectangle semble être annulable car ils sont tous opaques, vous devez donc dessiner chaque bord de la bordure séparément.

Steven
la source
Ou deux rectangles l'un dans l'autre :)
P-RAD
Ou un cercle, un cercle de la couleur d'arrière-plan, un drawLines () à trois segments et un rectangle, pour la quatrième ligne.
Tatarize le
0

Le code est parfait, il suffit de définir le style de peinture comme STROKE

paint.setStyle(Paint.Style.STROKE);
utilisateur3013823
la source