एंड्रॉइड एप्लिकेशन के लिए, मुझे एक डेटपिकर जैसा दिखने वाला एक इंटरफ़ेस तत्व चाहिए। वह सक्षम होना चाहिए:
- सूची को शुरू से अंत तक स्क्रॉल करें (लेकिन एक सर्कल में नहीं), ताकि केंद्रीय तत्व को उजागर किया जा सके।
- चूंकि घटक घटक के केंद्र से आगे बढ़ता है, संख्याओं के फ़ॉन्ट और पारदर्शिता को बदलता है
- वांछित आइटम के लिए सूची "लाओ"
- स्क्रीन पर तत्वों की निर्दिष्ट संख्या प्रदर्शित करें
- स्क्रॉल करने की दिशा निर्धारित करें (ऊपर या नीचे)
- टेक्स्ट बॉक्स सामग्री के लिए छाया बनाएं
आपको इस तरह का एक घटक मिलना चाहिए:

हम एक बच्चे की सूची दृश्य के साथ LinearLayout से हमारे RollView घटक का वारिस करेंगे। घटक के अंदर, हम स्क्रॉल करते समय ListView के व्यवहार को निर्धारित करने के लिए OnScrollListener इंटरफ़ेस को लागू करते हैं।
public class RollView extends LinearLayout implements OnScrollListener{ private final ListView innerListView; }
कंस्ट्रक्टर में, सूची दृश्य को xml फ़ाइल के माध्यम से आरंभ करें और श्रोता को असाइन करें।
डेटा का प्रतिनिधित्व करने के लिए, ओवरराइड getView () विधि के साथ एक आंतरिक एडेप्टर बनाएं:
private class RollAdapter extends ArrayAdapter<String> { private final LayoutInflater mInflater; @Override public View getView(int position, View convertView, ViewGroup parent) { if (convertView == null){ convertView = mInflater.inflate(R.layout.roll_view_adapter, null); convertView.setLayoutParams(mParams); } TextView tv = (TextView) convertView.findViewById(R.id.text); tv.setTag(position);
GetView पद्धति से सभी दृश्य ArrayList को उनके मापदंडों को बदलने के लिए लिखा जाएगा। रिफ्रेश लाइउटप्रेम () विधि सूची आइटमों के आकार को दिखाई देने वाली वस्तुओं की संख्या के आधार पर निर्धारित करती है। हमने एडॉप्टर वर्ग में और कुछ नहीं किया है।
बीच में सूची के पहले तत्व को स्थानांतरित करने में सक्षम होने के लिए, सरणी के आरंभ और अंत में खाली लाइनें जोड़ें।
अब आपको onScroll और onScrollStateChanged तरीकों में स्क्रॉल करने की आवश्यकता है:
private int lastFirstVisibleElement;
रिफ्रेशटेक्स्ट व्यू () विधि तत्व की स्थिति के आधार पर पाठ का आकार बदलने और पारदर्शिता के लिए जिम्मेदार है:
public void refreshTextViews(){ float maxTextSize = 0; for (View v : listViews){ int centerOfViewY = v.getBottom() - (mAdapter.mParams.height / 2); ShadowTextView tv = (ShadowTextView) v.getTag(); float coefficient = (Math.abs(centerOfViewY - mAdapter.centerLineY)) / (float)mAdapter.centerLineY; float scale = 0;
यह पाठ के लिए छाया जोड़ने के लिए बना हुआ है। ऐसा करने के लिए, TextView से विरासत में मिला शैडो टेक्स्ट व्यू घटक बनाएं। छाया के साथ पाठ आकर्षित करने के लिए, आपको एक ब्रश (पेंट) बनाने और इसके लिए पैरामीटर सेट करने की आवश्यकता है:
ब्रश विकल्पनिजी अंतिम पेंट mPaint = नया पेंट ();
और onDraw () विधि में, घटक को फिर से बनाएँ:
private final Rect mBounds = new Rect();
RollView से छाया हटाने के लिए, redraw () विधि जोड़ें:
public void redraw(){ text = getText().toString(); mPaint.setTextSize(getTextSize()); mPaint.getTextBounds(text, 0, getText().toString().length() , mBounds); invalidate(); }
वह सब कुछ जो TextView को शैडोटेक्स्ट व्यू के साथ बदलने और रिफ्रेशटेक्स्ट व्यू पद्धति में tv.redraw () विधि को कॉल करने के लिए है;
अब, उपयोगकर्ता द्वारा चयनित मूल्य प्राप्त करने के लिए, यह केवल getCurrentItemValue () और getCurrentItemIndex () विधियों को जोड़ने के लिए रहता है।
कार्य का दृश्य प्रदर्शन:
पूर्ण परियोजना के लिए लिंक:
https://bitbucket.org/msinchevskaya/rollview