Hình chữ nhật vẽ canvas Android


104

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

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ó vẽ hình chữ nhật và tô nó bằng màu đen nhưng tôi chỉ muốn "khung" xung quanh như hình ảnh này:

nhập mô tả hình ảnh ở đây


Câu trả lời:



124

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

    }

}

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ẽ thành ra theo cách này:

nhập mô tả hình ảnh ở đây


Trên thực tế đây là những gì tôi cần screencast.com/t/oFYF5kGtw5B rằng 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 vì sự giúp đỡ.
Kec

Tôi nghĩ DonGru và Juan đã đưa ra một lời giải thích tuyệt vời ở đây .. nhưng một trong những dòng câu trả lời chính xác với 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)
giả kim

Câu trả lời này không phù hợp với câu trả lời. Nó không hiển thị câu trả lời chính xác. Câu trả lời của Pandur là một trong những chính xác.
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

Tạo một lớp mới MyView, Which extends View. Ghi đè onDraw(Canvas canvas)phương thức để 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 đó, Di chuyển hoạt động Java của bạn sang setContentView()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 tại đây

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


6
paint.setStrokeWidth(3);

paint.setColor(BLACK);

và một trong hai của bạn drawRectsẽ hoạt động.


0

Không biết điều này có quá muộn không, nhưng cách tôi giải quyết vấn đề này là vẽ bốn hình chữ nhật mỏng ghép lại với nhau tạo thành một đường viền lớn. Việc vẽ đường viền với một hình chữ nhật dường như không thể hoàn tác vì tất cả chúng đều mờ, 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.


Hoặc hai hình chữ nhật bên trong một cái khác :)
P-RAD

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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.