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


Réponses:



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


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);

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


6
paint.setStrokeWidth(3);

paint.setColor(BLACK);

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


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.


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);
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.