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


Antworten:


157

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


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


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

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


6
paint.setStrokeWidth(3);

paint.setColor(BLACK);

und einer von euch drawRectsollte funktionieren.


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.


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);
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.