आप एक कस्टम दृश्य (जैसे PieProgressView) या एक कस्टम Drawable (जैसे PieProgressDrawable) कर सकते हैं या तो। मैंने कस्टम व्यू दृष्टिकोण लिया लेकिन या तो पूरी तरह व्यवहार्य है।
एंड्रॉइड के ProgressView के स्रोत पर एक त्वरित रूप से एक जटिल जटिल कार्यान्वयन पैदा करता है। जाहिर है, वे अपने सभी अड्डों को ढंक रहे हैं, लेकिन आपको जटिल कुछ लिखना नहीं है। हमें वास्तव में केवल दो चीजों की आवश्यकता है:
- वर्तमान प्रगति का ट्रैक रखने के लिए एक सदस्य।
- वर्तमान प्रगति के आधार पर पाई खींचने का एक तरीका।
नंबर एक आसान है, बस एक सदस्य फ़ील्ड रखें जो आकर्षित करने के लिए पाई के वर्तमान प्रतिशत को ट्रैक करता है। संख्या 2 थोड़ा अधिक जटिल है, लेकिन सौभाग्य से, हम इसे मानक कैनवास ड्रा विधियों के साथ कर सकते हैं।
सुविधाजनक रूप से, एंड्रॉइड की Canvas कक्षा drawArc() विधि प्रदान करती है। आप इसका उपयोग पाई प्रभाव प्राप्त करने के लिए कर सकते हैं। हम mPercent 0 और 1 के बीच एक नाव के रूप में बुलाया एक सदस्य क्षेत्र में हमारी प्रतिशत संग्रहीत मान लिया जाये कि, एक onDraw()
विधि इस प्रकार दिखाई देंगे:
@Override
protected void onDraw(Canvas canvas) {
final float startAngle = 0f;
final float drawTo = startAngle + (mPercent * 360);
// Rotate the canvas around the center of the pie by 90 degrees
// counter clockwise so the pie stars at 12 o'clock.
canvas.rotate(-90f, mArea.centerX(), mArea.centerY());
canvas.drawArc(mArea, startAngle, drawTo, true, mPaint);
// Draw inner oval and text on top of the pie (or add any other
// decorations such as a stroke) here..
// Don't forget to rotate the canvas back if you plan to add text!
...
}
यहाँ पूरा दृश्य एक नमूना अनुप्रयोग में कैसा दिखता है:
संपादित
पोस्टिंग के बाद से, मैं तय कर लिया है वहाँ वास्तव में कोई फिर से है जैसा कि आपको कस्टम व्यू को लागू करने की आवश्यकता है। आप वास्तव में क्या आवश्यक है करने के लिए एक खींचने योग्य और इसकी स्तर की संपत्ति का उपयोग कर सकते हैं।मैंने gist with the full drawable बनाया।
क्या आपका मतलब है कि आप एक गतिविधि सर्कल चाहते हैं ?? यहां दिखाए गए राउंड की तरह: http://developer.android.com/design/building-blocks/progress.html यदि नहीं, तो क्या आप इसका मतलब दिखा सकते हैं? –
और प्रगतिशील रूप से प्रगति को अद्यतन करने में सक्षम होने के लिए भी? - इसका मतलब यह है कि –
@ रेंजिथ के एन: प्रोग्राम्स को प्रोग्राम अपडेट करें: उदाहरण के लिए प्रत्येक 2 सेकंड में मैं सर्कल को कुछ रंग से भरना चाहता हूं; इस छवि में क्या है इसके साथ बहुत समान है: http://3.bp.blogspot.com/_sfxUTOTXTng/TQxMiOjIkNI/AAAAAAAAACo/xSeP2-nSXF4/s1600/progressBarStyleHorizontal.png, लेकिन मैं एक सर्कल में होना चाहता हूं। – Paul