2011-09-08 63 views
85

cách vẽ hình chữ nhật trống với v.v. BorderWidth = 3 và borderColor = màu đen và một phần trong hình chữ nhật không có nội dung hoặc màu sắc. Chức năng nào trong Canvas để sử dụngHình nền vẽ 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) 

Cảm ơn.

Tôi thử ví dụ này

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

Nó dựa hình chữ nhật và điền nó với màu đen nhưng tôi muốn chỉ là "khung" xung quanh như hình ảnh này:

enter image description here

+0

http: // stackoverflow.com/questions/11328848/drawing-a-circle-where-the-user-has-touch-on-canvas/28263820 # 28263820 – Yogendra

Trả lời

131

Hãy thử paint.setStyle(Paint.Style.STROKE)?

6
paint.setStrokeWidth(3); 

paint.setColor(BLACK); 

và hoặc một trong số drawRect của bạn sẽ hoạt động.

115

Giả sử rằng "một phần trong hình chữ nhật không có màu nội dung" có nghĩa là bạn muốn điền khác nhau trong hình chữ nhật; bạn cần phải vẽ một hình chữ nhật trong hình chữ nhật của bạn sau đó với chiều rộng nét 0 và màu tô (các) màu mong muốn.

Ví dụ:

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

    } 

} 

Các hoạt động để bắt đầu nó:

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

    } 
} 

... sẽ lần lượt ra t theo cách của mình:

enter image description here

+0

Thực ra đây là những gì tôi cần screencast.com/t/oFYF5kGtw5B hình chữ nhật màu đỏ sau khi tôi vẽ tất cả chỉ để thêm hình chữ nhật đó là có thể? – Kec

+21

Đây là giải pháp paint.setStyle (Style.STROKE); Cảm ơn bạn đã trợ giúp. – Kec

+0

Tôi nghĩ DonGru và Juan đã đưa ra một lời giải thích tuyệt vời ở đây .. nhưng câu trả lời chính xác một dòng cho những gì tác giả được yêu cầu đã được cung cấp dưới đây bởi @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

Không biết nếu quá muộn, nhưng cách tôi giải quyết điều này là vẽ bốn hình chữ nhật mỏng tạo thành một đường viền lớn. Vẽ đường viền bằng một hình chữ nhật dường như có thể hoàn tác vì chúng đều mờ đục, vì vậy bạn nên vẽ từng cạnh của đường viền một cách riêng biệt.

+2

Sau đó, bạn cũng có thể giải quyết điều này với 4 dòng, thay vì bốn hình chữ nhật ... – WHDeveloper

+0

Hoặc hai hình chữ nhật bên trong khác :) –

+0

Hoặc một vòng tròn, một vòng tròn màu nền, ba đường vẽ phân đoạn() và hình chữ nhật, cho dòng thứ tư. – Tatarize

6

Tạo một lớp mới MyView, Which extends View. Ghi đè phương thức onDraw(Canvas canvas) để vẽ hình chữ nhật trên 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) 

} 

} 

Sau đó, chuyển hoạt động Java của bạn sang setContentView() bằng cách sử dụng Chế độ xem tùy chỉnh, MyView.Call theo cách này.

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

Để biết thêm chi tiết bạn có thể truy cập vào đây

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

Các vấn đề liên quan