Prostokąt do rysowania kanwy systemu Android


105

jak narysować pusty prostokąt za pomocą itp. borderWidth = 3 i borderColor = black, a część w prostokącie nie ma treści ani koloru. Której funkcji w Canvas użyć

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

void drawRect(RectF rect, Paint paint)

void drawRect(Rect r, Paint paint)

Dzięki.

Próbuję tego przykładu

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

Rysuje prostokąt i wypełnia go czarnym kolorem, ale chcę tylko „obramować” wokół, jak na tym obrazku:

wprowadź opis obrazu tutaj


Odpowiedzi:



125

Zakładając, że „ część w prostokącie nie ma koloru zawartości ” oznacza, że ​​chcesz mieć różne wypełnienia w prostokącie; musisz narysować prostokąt w swoim prostokącie, a następnie z szerokością obrysu 0 i żądanymi kolorami wypełnienia.

Na przykład:

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

    }

}

Czynność, aby ją rozpocząć:

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

    }
}

... okaże się w ten sposób:

wprowadź opis obrazu tutaj


Właściwie to jest to, czego potrzebuję screencast.com/t/oFYF5kGtw5B tego czerwonego prostokąta po narysowaniu wszystkiego tylko po to, aby dodać ten prostokąt, czy to możliwe?
Kec,

21
To jest rozwiązanie paint.setStyle (Style.STROKE); Dzięki za pomoc.
Kec,

Myślę, że DonGru i Juan podali tutaj świetne wyjaśnienie ... ale dokładną jedną linijkę odpowiedzi na pytanie, o co prosi autor, udzielił poniżej @Yuck - paint.setStyle (Paint.Style.STROKE)
alchemik

Ta odpowiedź nie pasuje do odpowiedzi. Nie pokazuje aktualnej odpowiedzi. Odpowiedź Pandura jest prawidłowa.
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

Utwórz nową klasę MyView, Which extends View. Zastąp onDraw(Canvas canvas)metodę rysowania prostokąta 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)

 }

}

Następnie przenieś swoją aktywność w Javie do setContentView()korzystania z naszego niestandardowego widoku MyView.

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

Więcej informacji można znaleźć tutaj

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


6
paint.setStrokeWidth(3);

paint.setColor(BLACK);

i któryś z twoich drawRectpowinien działać.


0

Nie wiem, czy jest za późno, ale sposobem, w jaki to rozwiązałem, było narysowanie czterech cienkich prostokątów, które razem tworzyły jedną dużą ramkę. Rysowanie obramowania za pomocą jednego prostokąta wydaje się być cofnięte, ponieważ wszystkie są nieprzezroczyste, więc każdą krawędź obramowania należy narysować osobno.


Albo dwa prostokąty jeden w drugim :)
P-RAD

Lub okrąg, okrąg w kolorze tła, trójdzielny drawLines () i prostokąt dla czwartej linii.
Tatarize

0

Kod jest w porządku, po prostu ustaw styl farby na STROKE

paint.setStyle(Paint.Style.STROKE);
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.