2013-01-08 14 views
5

मैं स्क्रीन के बीच में चक्र आकर्षित करने के लिए चाहते हैं से मेल नहीं खाता है, लेकिन मैं कुछ इस तरह हो रही है:सर्किल कैनवास पर तैयार की स्क्रीन

enter image description here

मैं इस आकर्षित करने के लिए इस कोड का उपयोग कर रहा हूँ वृत्त।

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

भले ही मैं स्क्रीन के आकार का उपयोग यह आकर्षित करने के लिए कारण है कि यह पक्ष में कटौती हो, तो मुझे समझ में नहीं आता, तो यह पूरी तरह से फिट होना चाहिए।

+5

आपने लाइन की मोटाई के लिए खाता नहीं लिया था। आपने एक सर्कल खींचा है जिसमें यह 0 मोटाई है, इसलिए "वास्तविक" सर्कल ** आईएस ** स्क्रीन के किनारों को छू रहा है, लेकिन चूंकि आपने मोटी पेंटब्रश का उपयोग किया है, इसलिए कुछ दर्द किनारे से पीछे हट गए हैं। –

+0

क्या आपको स्ट्रोकविड्थ – Loris

+0

@MarcB पर विचार नहीं करना चाहिए, मुझे लगता है कि आपको वास्तव में इसे उत्तर के रूप में पोस्ट करना चाहिए :-) –

उत्तर

7

आपने लाइन की मोटाई (स्ट्रोकविड्थ) के लिए जिम्मेदार नहीं था। आपने एक सर्कल खींचा है जिसमें यह 0 मोटाई है, इसलिए "वास्तविक" सर्कल स्क्रीन के किनारों को छू रहा है, लेकिन चूंकि आपने मोटी पेंटब्रश का उपयोग किया है, इसलिए कुछ रंग किनारे से पीछे हट गए हैं। त्रिज्या में StrokeWidth के लिए

1

खाता:

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

आप मोटाई/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); 
    } 
संबंधित मुद्दे