एनिमेशन का उपयोग करना सबसे आसान समाधान होगा। आप अपना खुद का बना सकते हैं या कई TranslateAnimations और ScaleAnimations को आजमा सकते हैं और गठबंधन कर सकते हैं।
इसका मतलब यह होगा कि प्रत्येक नंबर को स्क्रॉल व्यू का उपयोग करने के बजाय अपने स्वयं के टेक्स्ट व्यू में डालना होगा।
फिर आप Interpolator के साथ मध्य में त्वरण को नियंत्रित कर सकते हैं। इंटरपोलेटर यह हैं कि एंड्रॉइड कैसे आसान हो जाता है। आप तेजी से धीमा/धीमा प्रभाव के लिए AccelerateDecelerateInterpolator चाहते हैं।
आप एक ही दृश्य में एकाधिक एनिमेशन लागू करने के लिए AnimationSet का उपयोग कर सकते हैं। एक अच्छी एनीमेशनसेट को एक साथ कैसे रखा जाए, यह पता लगाने के लिए परियोजना का सबसे चुनौतीपूर्ण हिस्सा होगा। "भरें" संपत्ति पर ध्यान देना सुनिश्चित करें। वास्तव में थोड़ा सा खेलने के बाद, मुझे लगता है कि कस्टम एनीमेशन तैयार किए गए लोगों का उपयोग करने से आसान है।
आप फोर्क my GitHub project जो इसका एक बहुत ही सरल संस्करण लागू करता है। 17 अप्रैल और इससे पहले कि मैंने कई पूर्व निर्मित एनिमेशन का इस्तेमाल किया था। यदि आप सबसे हालिया संस्करण को देखते हैं, तो आपको कस्टम एनीमेशन दिखाई देगा।
प्रत्येक एनीमेशन के लिए समय एक एनीमेशन के लिए अवधि निर्धारित करने के बाद स्वयं का ख्याल रखता है। Handler पिछले एक के बाद अगले नंबर पर कॉल करता है। मुझे लगता है कि यह सब कुछ अपडेट करने के लिए हर एक्स सेकंड में एक समारोह को कॉल करने से थोड़ा सा साफ है। कार्यक्षमता के
रूपरेखा:
- एक गतिविधि (CountDownActivity.java) से अधिक सब कुछ देखता है।
- एक्टिविटी के लेआउट एक्सएमएल में एक बटन है जिसका उपयोग गिनती शुरू करने के लिए किया जाता है।
- उलटी गिनती शुरू होने के बाद, बटन गायब हो जाता है। गिनती घटित होने पर यह फिर से दिखाई देता है।
- गतिविधि एक Handler (MotionHandler.java) शामिल हैं। Handler संख्याओं के आंदोलन और समय को नियंत्रित करता है।
- हैंडलर एक AnimationSet का उपयोग करता निर्भरता
- यह लचीलापन के लिए है में संख्या
- AnimationSet एक पारित हो जाता है ले जाने के लिए। बस एक अलग AnimationSet में पारित बदलने का तरीका संख्या को स्थानांतरित
- AnimationSet
चार एनिमेशन
एक कस्टम एनीमेशन से बना है (नीचे देखें)
- AnimationSet एक साझा AccelerateDecelerateInterpolator, का उपयोग करता है जो लगता है कि काम ठीक से लगता है। अपने स्वयं के लेखन सहित अन्य विकल्प भी हैं।
- हैंडलर का उपयोग करता है एक delayed message अगले संख्या
- हैंडलर गतिविधि इसकी सूचना देता उलटी गिनती एक कस्टम श्रोता (MotionHandler >> CountdownListener)
- डिवाइस घूर्णन का उपयोग किया जाता शुरू करने के लिए गिनती को फिर से शुरू कर देगा।
नोट - पहले मैं एक एनीमेशनसेट में चार तैयार किए गए एनिमेशन का उपयोग कर रहा था, मैंने केवल एक कस्टम एनीमेशन शामिल करने के लिए संपादित किया है ... आप अपनी पसंद के अनुसार अपने एल्गोरिदम को ट्विक कर सकते हैं।
यह कस्टम एनीमेशन Cycloid का उपयोग करता है ताकि संख्याएं बड़ी और छोटी दिखाई दे सकें।
/**
* A custom animation to move and scale the numbers.
*
*/
public class NumberAnimation extends Animation
{
final public static float MINIMUM = 3;
private int mHorizontal;
private int mScaling;
public NumberAnimation(int horizontalMovement, int scaling)
{
mHorizontal = horizontalMovement;
mScaling = scaling;
}
@Override
protected void applyTransformation(float interpolatedTime, Transformation t)
{
// Cycloid repeats every 2pi - scale interpolatedTime to that
double time = 2 * Math.PI * interpolatedTime;
// Cycloid function
float currentScale = (float) (mScaling * (1 - Math.cos(time))) + MINIMUM;
Matrix matrix = t.getMatrix();
matrix.preScale(currentScale, currentScale);
matrix.postTranslate(mHorizontal * interpolatedTime, 0);
}
}
स्रोत
2012-04-14 23:07:16
पीटर, मेरे प्रश्न का उत्तर देने के लिए समय निकालने के लिए धन्यवाद! –
@ किसी और जगह - यह मजेदार था। आशा करता हूँ की ये काम करेगा! –