2011-09-08 2 views
85

come disegnare un rettangolo vuoto con ecc. BorderWidth = 3 e borderColor = nero e la parte all'interno del rettangolo non hanno contenuto o colore. Quale funzione in Canvas utilizzarerettangolo di disegno su tela Android

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

Trae rettangolo e riempirlo con il colore nero, ma voglio solo "cornice" intorno come questa immagine:

enter image description here

+0

http: // StackOverflow.it/questions/11328848/drawing-a-circle-where-the-user-has-touched-on-canvas/28263820 # 28263820 – Yogendra

risposta

131

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

6
paint.setStrokeWidth(3); 

paint.setColor(BLACK); 

e uno dei tuoi drawRect dovrebbe funzionare.

115

Supponendo che "la parte" nel rettangolo non abbia il colore del contenuto "significa che si desidera riempimenti diversi all'interno del rettangolo; devi disegnare un rettangolo all'interno del rettangolo, quindi con la larghezza del tratto 0 e i colori di riempimento desiderati.

Ad 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à di 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); 

    } 
} 

... si accende fuori t la sua strada:

enter image description here

+0

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

+21

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

+0

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

11
//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); 
0

Non so se questo è troppo tardi, ma il modo in cui ho risolto questo è stato quello di disegnare quattro rettangoli sottili che insieme costituivano un unico grande bordo. Disegnare il bordo con un rettangolo sembra essere annullabile poiché sono tutti opachi, quindi è necessario disegnare separatamente ciascun bordo del bordo.

+2

Quindi potresti anche risolvere questo con 4 linee, anziché quattro rettangoli ... – WHDeveloper

+0

O due rettangoli uno dentro l'altro :) –

+0

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

6

Creare una nuova classe MyView, Which extends View. Ignora il metodo onDraw(Canvas canvas) per disegnare il rettangolo su 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 spostare la vostra attività Java per setContentView() usando la nostra visualizzazione personalizzata, MyView.Call in questo modo.

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

Per maggiori dettagli potete visitare qui

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