2011-09-08 257 views
85

如何繪製空白矩形等。borderWidth = 3和borderColor = black且矩形內的部分沒有內容或顏色。在Canvas中哪個功能可以使用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) 

謝謝。

我嘗試這個例子

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

它繪製矩形,填充黑色,但我想只是 「框架」 圍繞這樣的形象:

enter image description here

+0

的http://計算器。COM /問題/ 11328848 /繪圖一個圈,其中最用戶已經-觸碰畫布上/ 28263820#28263820 – Yogendra

回答

131

嘗試paint.setStyle(Paint.Style.STROKE)

6
paint.setStrokeWidth(3); 

paint.setColor(BLACK); 

和你的任一個drawRect應該工作。

115

假設「部分在矩形內沒有內容顏色」意味着您想在矩形內使用不同的填充;您需要在矩形內繪製一個矩形,然後使用筆觸寬度0和所需的填充顏色。

例如:

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

    } 

} 

啓動它的活動:

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

    } 
} 

...會變成out t他道:

enter image description here

+0

其實這正是我需要的screencast.com/t/oFYF5kGtw5B紅色矩形後,我畫的所有隻是爲了添加矩形是可能的? – Kec

+21

這是溶液 paint.setStyle(Style.STROKE); 感謝您的幫助。 – Kec

+0

我覺得DonGru和胡安給這裏一個很好的解釋。但確切一行的答案是什麼筆者要求已被@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

不知道這是否太晚了,但我解決這個問題的方法是繪製四個薄矩形,它們組成一個大邊框。用一個矩形繪製邊框似乎是可撤銷的,因爲它們都是不透明的,所以應該分別繪製邊框的每個邊緣。

+2

那麼你也有4條線路解決了這個,而不是四個矩形... – WHDeveloper

+0

或兩個矩形一個內部的其他:) –

+0

或圓,背景色的圓圈,三個分段drawLines()和矩形,爲第四行。 – Tatarize

6

創建一個新類MyView, Which extends View。重寫onDraw(Canvas canvas)方法在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) 

} 

} 

然後,使用我們自定義的視圖,MyView.Call這種方式將您的Java活動setContentView()

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

有關詳細信息,您可以點擊這裏查看

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