Rettangolo di disegno su tela Android


105

come disegnare un rettangolo vuoto con ecc. borderWidth = 3 e borderColor = black e la parte all'interno del rettangolo non ha contenuto o colore. Quale funzione utilizzare in 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)

Grazie.

Provo questo esempio

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

Disegna un rettangolo e lo riempie di colore nero ma voglio solo "cornice" intorno come questa immagine:

inserisci qui la descrizione dell'immagine


Risposte:


158

Provare paint.setStyle(Paint.Style.STROKE)?


124

Supponendo che "la parte all'interno del rettangolo non abbia il colore del contenuto " significa che vuoi riempimenti diversi all'interno del rettangolo; è necessario disegnare un rettangolo all'interno del rettangolo, quindi con larghezza del tratto 0 e il colore di riempimento desiderato.

Per esempio:

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'attività per avviarlo:

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

    }
}

... risulterà in questo modo:

inserisci qui la descrizione dell'immagine


In realtà questo è ciò di cui ho bisogno screencast.com/t/oFYF5kGtw5B quel rettangolo rosso dopo aver disegnato tutto solo per aggiungere quel rettangolo è possibile?
Kec

21
Questa è la soluzione paint.setStyle (Style.STROKE); Grazie per l'aiuto.
Kec

Penso che DonGru e Juan abbiano dato un'ottima spiegazione qui .. ma la risposta esatta di una riga a ciò che l'autore sta chiedendo è stata fornita di seguito da @Yuck - paint.setStyle (Paint.Style.STROKE)
alchemist

Questa risposta non si adatta alla risposta. Non mostra la risposta corretta. La risposta di Pandur è quella corretta.
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

Crea una nuova classe MyView, Which extends View. Sostituisci il onDraw(Canvas canvas)metodo su cui disegnare il rettangolo 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)

 }

}

Quindi sposta la tua attività Java setContentView()utilizzando la nostra visualizzazione personalizzata, MyView.

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

Per maggiori dettagli puoi visitare qui

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


6
paint.setStrokeWidth(3);

paint.setColor(BLACK);

e uno dei tuoi drawRectdovrebbe funzionare.


0

Non so se sia troppo tardi, ma il modo in cui l'ho risolto è stato disegnare quattro sottili rettangoli che insieme formavano un unico grande bordo. Disegnare il bordo con un rettangolo sembra essere annullabile poiché sono tutti opachi, quindi dovresti disegnare ogni bordo del bordo separatamente.


O due rettangoli uno dentro l'altro :)
P-RAD

Oppure un cerchio, un cerchio del colore di sfondo, un drawLines a tre segmenti () e un rettangolo, per la quarta riga.
Tatarize

0

Il codice va bene solo impostareStyle of paint come STROKE

paint.setStyle(Paint.Style.STROKE);
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.