2012-11-12 13 views
9

मैंने एक लंबी onDraw विधि लागू की है जो आयताकारों का एक सेट खींचती है। आयताकार बहुत छोटे होते हैं और मैं उन्हें बड़ा दिखाना चाहता हूं। लेकिन दुर्भाग्य से मैं आयताकार निर्देशांक नहीं बदल सकता क्योंकि वे डेटाबेस में संग्रहीत हैं। तो क्या canvas.scale() का उपयोग कर कैनवास में ज़ूम कर सकते हैं?canvas.scale फ़ंक्शन का उपयोग कर कैनवास में ज़ूम करें?

+1

"लेकिन दुर्भाग्यवश मैं आयत समन्वय को बदल नहीं सकता, वे डेटाबेस में संग्रहीत हैं" क्यों? आप डीबी से निर्देशांक प्राप्त करते हैं और drawRectangle() से पहले आपको जो भी स्केल कारक चाहिए उसे गुणा करें। – Simon

+0

क्या मैं इस तरह फ़ंक्शन में ज़ूम लागू कर सकता हूं? – Ruby

+1

x = getValueFromDatabase(), y = getValueFromDatabase(), x = x * 5; y = y * 5; drawRectangle (एक्स, वाई)। ऐसा कुछ गलत क्या है? मेरा मुद्दा यह है कि डेटाबेस में संग्रहीत मानों को क्यों आयताकारों को बड़ा करना बंद कर देता है? मुझे यह नहीं मिला। बेशक आप आयताकार निर्देशांक बदल सकते हैं। आप उन्हें कुछ भी बना सकते हैं जो आप चाहते हैं। – Simon

उत्तर

18

मैं यह कहकर इस जवाब का प्रस्ताव देने जा रहा हूं कि आपको 0,0 पर सबकुछ खींचने की आवश्यकता होगी और फिर इसे स्केल करें, और आखिर में इसका सही तरीके से व्यवहार करने के लिए अनुवाद करें।

बस अपने OnDraw विधि में निम्न कार्य करें:

canvas.save(); 
    canvas.translate(xValue, yValue); 
    canvas.scale(xScale, yScale) 
    /* draw whatever you want scaled at 0,0*/ 
canvas.restore(); 

X स्केल सिकुड़ता है या एक्स दिशा में हिस्सों, yScale सिकुड़ता है या Y दिशा में विस्तृत।

1.0 इनके लिए डिफ़ॉल्ट है, इसलिए 2.0 इसे डबल से बढ़ाएगा और 0.5 इसे आधे से कम कर देगा।

उदाहरण:

canvas.save(); 
    canvas.translate(50, 50); 
    canvas.scale(0.5f, 0.5f); 
    canvas.drawRect(0.0, 0.0, 5.0, 5.0, paint); 
canvas.restore(); 

यह, लंबाई 5.0, और चौड़ाई 5.0 के साथ एक आयत आकर्षित करेगा लंबाई और चौड़ाई के लिए 2.5 पर स्केल, और उसके बाद (50, 50) पर ले जाते हैं।

परिणाम एक आयत तैयार किया जाएगा, जैसे कि तुम ऐसा किया:

canvas.drawRect(50.0, 50.0, 52.5, 52.5, paint); 

मुझे आशा है कि इस मदद करता है!

+0

लेकिन विभिन्न रिज़ॉल्यूशन डिवाइसों में स्केल फ़ंक्शन व्यवहार अलग-अलग हैं। – zionpi

+0

संकल्प द्वारा स्केल प्रभावित नहीं है, क्योंकि हम केवल पिक्सेल के बारे में बात कर रहे हैं। –

+0

यदि कोई यहां वेब के लिए समाधान मांगने के लिए आएगा (जैसा मैंने किया था)। यहां उदाहरण कोड संशोधित किया गया है: 'context.translate (50, 50); context.scale (0.5, 0.5); context.fillRect (0.0, 0.0, 5.0, 5.0); ' –

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