2010-08-25 10 views
14

आप एंड्रॉइड में मनमानी आकार की एनिमेटेड डैश या डॉटेड सीमा कैसे बनाते हैं? एक्सएमएल (पसंदीदा) या प्रोग्रामेटिक रूप से।एंड्रॉइड में एनिमेटेड डैशेड सीमा

उदाहरण के लिए नीचे चित्र देखें।

alt text

+0

क्या यह किसी मोबाइल डिवाइस में वांछनीय है? BLINK टैग के रूप में आकर्षक होने के अलावा, यह बैटरी पावर खाने जा रहा है। यदि यह विज्ञापनों के बारे में है, तो यह खुश ग्राहकों को पाने का तरीका नहीं है। –

+0

यह मेरे उपयोग के मामले के लिए वांछनीय है। यह एक ग्राफिक्स ऐप के लिए है, और धराशायी एनीमेशन सीमा मास्क के लिए एक सार्वभौमिक प्रतीक है। साथ ही, मुझे नहीं लगता कि यह एक लाइव पृष्ठभूमि कहने से अधिक बैटरी पावर खाएगा। – hpique

+0

ठीक है, मुझे घृणास्पद विज्ञापन उद्देश्यों पर संदेह है। यह एक उचित उद्देश्य है। –

उत्तर

18

क्या आपने PathEffects API डेमो देखा है? http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/PathEffects.html

यह एक एनिमेटेड लाइन का उत्पादन करता है और आप सीमा बनाने के लिए अपने दृश्य के किनारे पर पथ को समायोजित कर सकते हैं। उदाहरण के लिए:

आपके विचार मानकों/मनमाने आकार से एक पथ परिभाषित करें:

Path path = new Path(); 
path.addRect(view.getLeft(), view.getTop(), view.getRight(), view.getBottom(), Path.Direction.CW); 

फिर साथ एक धराशायी PathEffect बनाएँ:

PathEffect pe = new DashPathEffect(new float[] {10, 5, 5, 5}, phase); 

फिर सहयोगी यह एक पेंट वस्तु के साथ सेट और आकर्षित :

mPaint.setPathEffect(pe); 
canvas.drawPath(path, mPaint); 

संपादित करें: एनिमेटेड प्रभाव लगातार चरण को बदलने से आता है और redrawing। एपीआई डेमो में यह ऑनड्रा() विधि में अमान्य() को कॉल करता है (जो ड्रॉ() पर ट्रिगर करता है ...)

+0

धन्यवाद एंटोनिट!यही वह है जिसकी तलाश में मैं हूं। करुणा इसे xml में परिभाषित नहीं किया जा सकता है। – hpique

+1

इसके साथ एक मुद्दा यह है कि यह कई ऑब्जेक्ट्स आवंटित करता है जो कचरा संग्रह को ट्रिगर करेंगे और आपकी एनीमेशन को स्टटर कर सकते हैं। आप कहीं भी कक्षा के सदस्य के रूप में फ़्लोट [] आवंटित करके इस मुद्दे के भाग से बच सकते हैं। निश्चित रूप से चरण परिवर्तन में हर बार DashPathEffect आवंटन से बचने के लिए सुनिश्चित नहीं है, बेशक आप लाइनों का अनुवाद करके स्वयं एनीमेशन को संभाल सकते हैं। – mwd

+0

आप डैशपैथफेक्ट्स (फ्लोट सरणी में उच्चतम संख्या के बराबर आकार, इस मामले में 10 के बराबर आकार) का एक सरणी बना सकते हैं, और इन प्रभावों का दोबारा उपयोग कर सकते हैं। कम से कम यह मैं कर रहा हूं, लेकिन 'PathDashPathEffect' प्रभाव के लिए। –

0

एक्सएमएल ... मैं संभव नहीं लगता है। लेकिन आप एक कस्टम व्यू या एक SurfaceView का उपयोग कर सकते हैं और ड्राइंग को अपने आप से संभाल सकते हैं। उस के साथ मजा लें :)

+0

किसी भी पॉइंटर्स को इसे कस्टम व्यू या SurfaceView के साथ कार्यान्वित करने के लिए? – hpique

+0

आप प्रत्येक कैनवास पर रेखाएं खींच सकते हैं और प्रयुक्त पेंट ऑब्जेक्ट में विभिन्न शैलियों हो सकती हैं। यदि आप ऊपर की एक काले धराशायी रेखा के साथ सफेद रेखा के बीच बदलते हैं और प्रत्येक फ्रेम पर ऊपर सफेद धराशायी रेखा के साथ काली रेखा, आपको कामनात्मक प्रभाव मिलना चाहिए। – WarrenFaith

0

क्या आप दो 9 लेच छवियों के कुछ रूपों का उपयोग कर सकते हैं, जो छवि फ़ाइल के चारों ओर एक पृष्ठभूमि फ्रेम के रूप में आप प्रस्तुत करना चाहते हैं, प्रत्येक दो लेआउट में से एक। धब्बेदार तत्वों के प्लेसमेंट के मामले में छवियां अलग-अलग होंगी। विचारों को तेजी से आदान-प्रदान करें (देरी की आवश्यकता हो सकती है) और आपको वह प्रभाव मिल सकता है जो आप चाहते हैं। वास्तव में यह नहीं पता कि यह कितना प्रभावी होगा कि उपयोगकर्ता ऐप और चबाने वाली बैटरी का उपयोग जारी रखने में सक्षम होने के मामले में होगा ...

+0

एक एनीमेशन में दो 9 पैच छवियां खींचने योग्य। यह काम कर सकता है, और एक्सएमएल के माध्यम से कर योग्य है। इसकी एक बार कोशिश करूंगा। – hpique

+0

नहीं। काम नहीं करता 9 पैच छवियां पैटर्न दोहराती नहीं हैं, वे सिर्फ छवि का एक हिस्सा खींचती हैं। – hpique

+0

क्षमा करें, मैं जो प्राप्त कर रहा था वह यह है कि आप 9 पैच प्रारूप में दो छवियां बनाते हैं। आपको खुद को पैटर्न बनाना होगा, लेकिन इस तरह से यदि आप तेजी से उनके बीच स्विच करना चाहते हैं तो यह भ्रम पैदा करेगा कि डैश चल रहे थे। – Adriaan

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