2014-09-24 8 views
8

मैं प्रत्येक बार बटन दबाए जाने पर दृश्य (एक अनिश्चित प्रगतिबार) को स्केल करने के लिए व्यूप्रॉपर्टीएनिमीटर का उपयोग करने की कोशिश कर रहा हूं।एंड्रॉइड व्यूप्रॉपर्टीएनिमीटर एक ही समय में स्केल नहीं करता है

loadingCircle.animate().scaleY(1.0f).scaleX(1.0f).setDuration(100f); 

कुछ भी नहीं जटिल:

loadingCircle.animate().scaleY(1.5f).scaleX(1.5f).setDuration(100f); 

मैं एक animatorListener कि वापस सामान्य onAnimationEnd को मापता है। हालांकि, यह हमेशा एक ही समय में एक्स और वाई दोनों पैमाने पर प्रतीत नहीं होता है।

आमतौर पर यह पहली बार सही होता है, कभी-कभी दूसरी बार। जब यह काम नहीं करता है, तो यह केवल श्रृंखला में अंतिम ऑपरेशन को एनिमेट करता है। यदि यह scaleX है, यह केवल एक्स पैमाने पर अगर मैं उसके चारों ओर स्वैप जाएगा, यह scaleX और scaleY के लिए केवल पैमाने वाई

प्रलेखन कहेंगे:

एनिमेशन पहले से ही

रद्द कर दिया जाएगा संपत्ति पर चल रहा है

हालांकि, मैंने सोचा कि व्यूप्रॉपर्टीएनिमीटर को जंजीर करने में सक्षम था, और यह टिप्पणी केवल नए एनिमेशन (कोड की एक अलग पंक्ति पर) के लिए लागू होती है। क्या मैं कुछ गलत कर रहा हूं, या मुझे एक बग मिला है?

मैं गैलेक्सीएस 4 पर एंड्रॉइड 4.2.2 चला रहा हूं। स्टॉक रॉम, लेकिन जड़ें। अगर इससे कोई फर्क पड़ता है।

+0

यदि आपने जो कुछ देखा है वह सही है तो मुझे लगता है कि हाँ, आपके पास है। – mmlooloo

उत्तर

6

मेरा मानना ​​है कि यह वास्तव में एक बग है। मैंने उसी परिणाम प्राप्त करने के लिए ViewPropertyAnimator के बजाय ObjectAnimator का उपयोग करके इस पर काम किया। स्रोत कोड व्यवहार आपके द्वारा बताई गई एकदम सही समझ में आता है और डिजाइन के द्वारा होता है के माध्यम से पढ़ना http://developer.android.com/guide/topics/graphics/prop-animation.html#view-prop-animator

2

:

ObjectAnimator animX = ObjectAnimator.ofFloat(loadingCircle, "scaleX", 1.0f); 
ObjectAnimator animY = ObjectAnimator.ofFloat(loadingCircle, "scaleY", 1.0f); 
AnimatorSet animSetXY = new AnimatorSet(); 
animSetXY.playTogether(animX, animY); 
animSetXY.start(); 

स्रोत: तो, तुम्हारा कुछ ऐसा दिखाई देगा। जब आप एनीमेशन जोड़ते हैं, तो यह अगले रनलोप/जब यह हो सकता है, तो शुरू होगा। कभी-कभी आप ऐसा होने से पहले दोनों एनिमेशन प्राप्त कर पाएंगे, कभी-कभी आप नहीं करेंगे।

यदि आप इसे तुरंत एनीमेशन शुरू नहीं करने के लिए कहते हैं, तो आपके पास अपने सभी एनिमेशन जोड़ने के लिए पर्याप्त समय होगा। यह स्पष्ट रूप से एक हैक का एक सा है।

आप शायद कुछ इस तरह की कोशिश कर सकते: "मैं एक बग पाया है"

loadingCircle.animate() 
    .setStartDelay(1000) //prevent the animation from starting 
    .scaleY(1.5f) 
    .scaleX(1.5f) 
    .setDuration(100f) 
    .setStartDelay(0) 
    .start(); 
0
AnimatorSet set = new AnimatorSet(); 
     set.setInterpolator(new AccelerateInterpolator()); 
     set.setDuration(100l); 
     view.setPivotX(halfWidth); 
     view.setPivotY(helfHeight); 
     set.play(ObjectAnimator.ofFloat(view, View.SCALE_X, 0f, 1f)) 
       .with(ObjectAnimator.ofFloat(hRippleAdd, View.SCALE_Y, 0f, 1f)); 
     set.start(); 
+0

आपके कोड के बारे में कुछ समझाने के लिए बेहतर है;) –

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