2010-05-14 10 views
37

एक बंद पथ वस्तु परिणाम को देखते हुए इस तरह है:रैखिक ढाल वाले एंड्रॉइड में पथ कैसे भरें?

enter image description here

कि हालांकि एक आयत मैं कुछ जो किसी भी बंद पथ के साथ काम करता रहा हूँ है।

+0

एक शानदार, कोई , एक शानदार सवाल! – Subby

उत्तर

71

जबकि steelbytes 'जवाब शायद आप ढाल के अलग-अलग वर्गों पर अधिक नियंत्रण दे देंगे, आप पथ के बिना यह कर सकते हैं:

protected void onDraw(Canvas canvas) 
{ 
    super.onDraw(canvas); 
    Paint p = new Paint(); 
    // start at 0,0 and go to 0,max to use a vertical 
    // gradient the full height of the screen. 
    p.setShader(new LinearGradient(0, 0, 0, getHeight(), Color.BLACK, Color.WHITE, Shader.TileMode.MIRROR)); 
    canvas.drawPaint(p); 
} 
+31

ठीक है लेकिन ऑनड्रा (...) विधियों में पेंट इंस्टेंस का निर्माण कभी नहीं करें – ebtokyo

+0

@ebtokyo: प्रदर्शन कारणों से? क्या आप इसे सृजन पर कैश करेंगे और प्रत्येक ऑन ड्रा (या शायद आकार में) पर अपना आकार अपडेट करेंगे? प्रदर्शन कारणों से – idbrii

+0

हां। OnDraw में एक प्रकार का वृक्ष की टिप्पणियां आवंटन() इस तरह: "ड्रा/लेआउट आपरेशनों के दौरान वस्तु आवंटन से बचें (preallocate और बदले का पुन: उपयोग)" –

28

इस मदद मिल सकती है

protected void onDraw(Canvas canvas) 
{ 
    super.onDraw(canvas); 
    int w = getWidth(); 
    int h = getHeight(); 
    Paint p = new Paint(Paint.ANTI_ALIAS_FLAG|Paint.FILTER_BITMAP_FLAG); 
    Path pth = new Path(); 
    pth.moveTo(w*0.27f,0); 
    pth.lineTo(w*0.73f,0); 
    pth.lineTo(w*0.92f,h); 
    pth.lineTo(w*0.08f,h); 
    pth.lineTo(w*0.27f,0); 
    p.setColor(0xff800000); 
    p.setShader(new LinearGradient(0,0,0,h,0xff000000,0xffffffff,Shader.TileMode.CLAMP)); 
    canvas.drawPath(pth,p); 
} 
संबंधित मुद्दे