2011-09-08 16 views
85

आदि के साथ खाली आयत कैसे आकर्षित करें सीमावर्ती = 3 और सीमा रंग = आयताकार के भीतर काले और भाग में सामग्री या रंग नहीं है।एंड्रॉइड कैनवास ड्रा आयताकार

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: // stackoverflow।कॉम/प्रश्न/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); 

    } 
} 

... बदल जाएगी बाहर टी अपने तरीके से:

enter image description here

+0

असल में मुझे स्क्रीनकास्ट.com/t/oFYF5kGtw5B की आवश्यकता है जो लाल आयत के बाद मैं सभी को आकर्षित करता हूं बस उस आयत को जोड़ने के लिए यह संभव है? – Kec

+21

यह समाधान paint.setStyle (Style.STROKE) है; सहायता के लिए धन्यवाद। – Kec

+0

मुझे लगता है कि डॉनग्रू और जुआन ने यहां एक महान स्पष्टीकरण दिया है .. लेकिन लेखक के लिए पूछे जाने वाले सटीक एक पंक्ति का जवाब @Yuck - पेंट.सेट स्टाइल (पेंट। स्टाइल.स्ट्रोक) – 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 बनाएं। Canvas पर आयत खींचने के लिए onDraw(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 इस तरह का उपयोग कर setContentView() करने के लिए अपने जावा गतिविधि ले जाएँ।

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

अधिक जानकारी के लिए आप यहाँ पर जा सकते हैं

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

संबंधित मुद्दे