web-dev-qa-db-fra.com

Dessin sur toile Android rectangle

comment dessiner un rectangle vide avec etc. borderWidth = 3 et borderColor = black et une partie du rectangle n'ont ni contenu ni couleur. Quelle fonction utiliser dans Canvas?

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" autour comme cette image: 

enter image description here

95
Kec

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

145
pandur

En supposant que "partie dans le rectangle n'a pas de couleur de contenu" signifie que vous voulez différents remplissages dans le rectangle; vous devez dessiner un rectangle dans votre rectangle, puis avec la largeur de trait 0 et la ou les couleurs de remplissage désiré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 déroulera de cette façon:

enter image description here

119
DonGru
//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);
11
Cristopher Loli

Créez une nouvelle classe MyView, Which extends View. Remplacez la méthode onDraw(Canvas canvas) pour dessiner un rectangle sur 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)

 }

}

Déplacez ensuite votre activité Java vers setContentView() en utilisant notre affichage personnalisé, MyView.Call.

    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

7
IntelliJ Amiya
Paint.setStrokeWidth(3);

Paint.setColor(BLACK);

et l’un de vos drawRect devrait fonctionner.

6
Kenny Lim

Le code est correct, il suffit de définir Style of Paint comme STROKE

Paint.setStyle(Paint.Style.STROKE);
0
user3013823

Je ne sais pas si c'est trop tard, mais j'ai résolu le problème en traçant quatre rectangles minces qui, ensemble, forment une grande bordure. Dessiner la bordure avec un rectangle semble être impossible, car ils sont tous opaques. Vous devez donc dessiner chaque bord de la bordure séparément.

0
Steven