Android Leinwand zeichnen Rechteck

104

Wie zeichnet man ein leeres Rechteck mit etc. borderWidth = 3 und borderColor = schwarz und Teile innerhalb des Rechtecks ​​haben weder Inhalt noch Farbe. Welche Funktion in Canvas soll verwendet werden?

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

void drawRect(RectF rect, Paint paint)

void drawRect(Rect r, Paint paint)

Vielen Dank.

Ich versuche dieses Beispiel

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

Es zeichnet ein Rechteck und füllt es mit schwarzer Farbe, aber ich möchte nur "Rahmen" wie dieses Bild:

Geben Sie hier die Bildbeschreibung ein

Kec
quelle

Antworten:

157

Versuchen Sie es paint.setStyle(Paint.Style.STROKE)?

Pandur
quelle
124

Angenommen, " Teil innerhalb eines Rechtecks ​​hat keine Inhaltsfarbe " bedeutet, dass Sie unterschiedliche Füllungen innerhalb des Rechtecks ​​wünschen. Sie müssen ein Rechteck innerhalb Ihres Rechtecks ​​zeichnen, dann mit der Strichbreite 0 und den gewünschten Füllfarben.

Beispielsweise:

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

    }

}

Die Aktivität zum Starten:

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

    }
}

... wird sich so herausstellen:

Geben Sie hier die Bildbeschreibung ein

DonGru
quelle
Eigentlich ist es das, was ich brauche screencast.com/t/oFYF5kGtw5B dieses rote Rechteck, nachdem ich alles gezeichnet habe, nur um dieses Rechteck hinzuzufügen, ist das möglich?
Kec
21
Dies ist die Lösung paint.setStyle (Style.STROKE); Danke für die Hilfe.
Kec
Ich denke, DonGru und Juan haben hier eine großartige Erklärung gegeben. Aber die genaue einzeilige Antwort auf die Frage des Autors wurde unten von @Yuck - paint.setStyle (Paint.Style.STROKE)
Alchemist
Diese Antwort passt nicht zur Antwort. Die entsprechende Antwort wird nicht angezeigt. Pandurs Antwort ist die richtige.
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
quelle
7

Erstellen Sie eine neue Klasse MyView, Which extends View. Überschreiben Sie die onDraw(Canvas canvas)Methode zum Zeichnen von Rechtecken 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)

 }

}

Verschieben Sie dann Ihre Java-Aktivität auf setContentView()diese Weise in unsere benutzerdefinierte Ansicht MyView.Call.

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

Weitere Details finden Sie hier

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

IntelliJ Amiya
quelle
6
paint.setStrokeWidth(3);

paint.setColor(BLACK);

und einer von euch drawRectsollte funktionieren.

Kenny Lim
quelle
0

Ich weiß nicht, ob dies zu spät ist, aber ich habe das gelöst, indem ich vier dünne Rechtecke gezeichnet habe, die zusammen einen großen Rand bildeten. Das Zeichnen des Rahmens mit einem Rechteck scheint nicht rückgängig zu machen, da alle undurchsichtig sind. Sie sollten daher jede Kante des Rahmens separat zeichnen.

Steven
quelle
Oder zwei Rechtecke ineinander :)
P-RAD
Oder ein Kreis, ein Kreis mit der Hintergrundfarbe, drei segmentierte Zeichenlinien () und ein Rechteck für die vierte Zeile.
Tatarize
0

Der Code ist in Ordnung, setzen Sie einfach den Farbstil als STROKE

paint.setStyle(Paint.Style.STROKE);
user3013823
quelle