2013-01-08 33 views
5

Tôi muốn vẽ vòng tròn ở trung tâm của màn hình, nhưng tôi nhận được một cái gì đó như thế này:Vòng vẽ trên vải không phù hợp với màn hình

enter image description here

Tôi đang sử dụng mã này để vẽ này vòng tròn.

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    Display display = getWindowManager().getDefaultDisplay(); 
    int width = display.getWidth(); 
    int height = display.getHeight(); 

    Bitmap bmp = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_4444); 

    Canvas c = new Canvas(bmp); 

    RectF rect = new RectF(0,0,width,width); 
    drawCircle(rect, c, width, height); 
    ImageView img = (ImageView) findViewById(R.id.imageView1); 
    img.setImageBitmap(bmp); 
    img.setScaleType(ScaleType.FIT_CENTER); 


} 

private void drawCircle(RectF rect, Canvas c, int width, int height) { 
    Paint paint = new Paint(); 
    paint.setARGB(255, 255 , 10, 21); 
    paint.setStrokeWidth(10); 
    paint.setAntiAlias(true); 
    paint.setStrokeCap(Paint.Cap.BUTT); 
    paint.setStyle(Paint.Style.STROKE); 
    int radius; 
    if(width < height) 
     radius = width/2; 
    else 
     radius = height/2; 
    c.drawCircle(width/2, height/2, radius, paint); 
} 

Tôi không hiểu tại sao nó cắt ở hai bên mặc dù tôi sử dụng kích thước của màn hình để vẽ nó, vì vậy nó nên hoàn hảo phù hợp với nó.

+5

bạn không tính đến độ dày của đường kẻ. bạn vẽ một vòng tròn giả sử nó có độ dày 0, do đó, vòng tròn "thực tế" ** IS ** chạm vào các cạnh của màn hình, nhưng vì bạn đã sử dụng một cọ dày, một số cơn đau bị rò rỉ qua mép. –

+0

Bạn cũng không nên xem xét strokeWidth – Loris

+0

@MarcB Tôi nghĩ bạn nên đăng nó như là câu trả lời :-) –

Trả lời

7

Bạn không tính đến độ dày của đường kẻ (strokeWidth). Bạn vẽ một vòng tròn giả sử nó có độ dày 0, vì vậy vòng tròn "thực tế" IS chạm vào các cạnh của màn hình, nhưng kể từ khi bạn sử dụng một bàn chải dày, một số sơn bị rò rỉ qua các cạnh.

1

tài khoản cho các StrokeWidth trong bán kính:

// Substract stroke width. 
radius -= paint.getStrokeWidth()/2; 
c.drawCircle(width/2, height/2, radius, paint); 
2

bạn nên giảm độ dày/2.

private void drawCircle(RectF rect, Canvas c, int width, int height) { 
     Paint paint = new Paint(); 
     paint.setARGB(255, 255 , 10, 21); 
     paint.setStrokeWidth(10); 
     paint.setAntiAlias(true); 
     paint.setStrokeCap(Paint.Cap.BUTT); 
     paint.setStyle(Paint.Style.STROKE); 
     int radius; 
     if(width < height) 
      radius = width/2; 
     else 
      radius = height/2; 

//this is the new line: 
     radius-= 5; 
     c.drawCircle(width/2, height/2, radius, paint); 
    } 
Các vấn đề liên quan