एंड्रॉइड में एक दृश्य को कैसे एनिमेट करें और क्या यह नई स्थिति / आकार में रहता है?


81

वर्तमान में मेरे एंड्रॉइड ऐप में एक दृश्य है और दृश्य एक फ्रेम एनीमेशन खेल रहा है। मैं इसके आकार को 150% तक बढ़ाने के लिए दृश्य को चेतन करना चाहता हूं। जब मैं इसके लिए एक स्केल एनीमेशन लागू करता हूं, और स्केल एनीमेशन पूरा हो जाता है, तो मैं चाहता हूं कि दर्शक बाकी गतिविधि के जीवन चक्र के लिए उस नए आकार पर बने रहें। दुर्भाग्य से अभी जब स्केल-अप एनीमेशन पूरा हो गया है, तो दृश्य मूल आकार में वापस आ जाता है। नया एनिमेटेड परिवर्तन रखने के लिए मैं इसे कैसे प्राप्त कर सकता हूं?

मैं उपयोग कर रहा हूँ

myView.startAnimation(AnimationUtils.loadAnimation(mContext,R.anim.scaleUp150));

धन्यवाद!

जवाबों:


150

सुनिश्चित करें कि आप अपने एनीमेशन xml में मूल तत्व के नीचे के गुण जोड़ें :

android:fillAfter="true" 
android:fillEnabled="true"

7
यही असली जवाब है। ओपी को इसे स्वीकार किए जाने वाले उत्तर में बदलना चाहिए। शुक्रिया क़लीमक्स !! (PS यह देव गाइड के "एनीमेशन" खंड में प्रलेखित नहीं है, यह केवल एनीमेशन वर्ग के लिए javadocs में प्रलेखित है। इस तरह के खराब प्रलेखन!)
नील ट्रैफ़

7
इस कोड को कहाँ रखा जाए? में <set ...></set>या एनीमेशन टैग में ( translate| rotate| scale)?
xxxxxxxxxadfas 13

5
जैसा कि नीचे उल्लेख किया गया है, आपको इसे सेट
परमेटर में

3
यह काम नहीं करता। मैं एनीमेशन के साथ दृश्य का वास्तविक आकार बदलना चाहता हूं। यह केवल सामग्री को बदलता है। मैं 1.0 से 0.0 तक स्केल Y बदल रहा हूं और एनीमेशन होता है लेकिन एक खाली जगह छोड़ देता है जहां दृश्य हुआ करता था। इसके अलावा, मैंने View.GONE की कोशिश की लेकिन वह खाली जगह में अन्य विचारों को छीन लेता है। जब मैं सिकुड़ता है तो मुझे स्केलिंग दृश्य के आकार का पालन करने के लिए अन्य विचारों की आवश्यकता होती है। उस काम को कैसे प्राप्त करें?
सुधांशु

1
इसे पढ़ने वाले किसी अन्य व्यक्ति को ध्यान दिया fillAfterजाएगा जो केवल दृश्य पिक्सेल को बनाए रखेगा जबकि वास्तविक दृश्य अभी भी प्रारंभिक स्थिति में होगा। आपको LayoutParamsअपने दृश्य को संभवतः onAminationEnd (श्रोता) में मैन्युअल रूप से सेट करने की आवश्यकता है ।
मुहम्मद बाबर

52

कोड से एनीमेशन का निर्माण करने और इस तरह के गुण सेट करने का प्रयास करें

anim.setFillEnabled(true);
anim.setFillAfter(true);

लेकिन नई समस्या है, मैं उस पर स्पर्श घटना प्राप्त करते हैं। stackoverflow.com/questions/4728908/…
W00di

32

यदि आप अपना एनीमेशन किसी xml में रखना चाहते हैं , तो उसे मदद करने के लिए इसकी आवश्यकता हो सकती है:

<set
android:fillEnabled="true"
android:fillAfter="true"
xmlns:android="http://schemas.android.com/apk/res/android">

<translate
    android:fromYDelta="0"
    android:toYDelta="-20%p"
    android:duration="7000" />

</set>

https://stackoverflow.com/a/6519233/371749

कृपया अन्य उत्तर की सराहना करें, मेरी मदद की :) शुभकामनाएँ!


22

आजकल यह बहुत आसान हो गया है:

view.animate().x(valueX).y(valueY).setDuration(500).start();

(इस स्निपेट में ViewPropertyAnimator का उपयोग किया गया है)।

या तो कई अन्य विकल्पों को जोड़ना संभव है।

व्यू नई स्थिति में स्थित होगा।


यह ट्रेंडिंग टॉपिक के रूप में पोस्ट किया जाना चाहिए
कोटिक_

2

संपादित करें: क्लीमैक्स का उत्तर बेहतर है, लेकिन चूंकि ओपी चेकमार्क को बदलने के लिए वापस नहीं आया है और मैं स्वीकार किए गए उत्तर को नहीं हटा सकता, इसलिए मैं इसे यहां कॉपी करूंगा: बस fillAfter = true fillEnabled = true सेट करें

मेरा मूल उत्तर (जो काम करता है, लेकिन तुलनात्मक रूप से हल्का हास्यास्पद है) इस प्रकार है:

एनीमेशन के बाद अपेक्षा के अनुसार काम करने के लिए, कम से कम इस धागे के अनुसार , आपको एक onAnimationEndहैंडलर लिखना होगा , और वहां, अंतिम दृश्य के अंतिम परिणाम से मिलान करने के लिए अपने दृष्टिकोण के "वास्तविक" (पूर्व-परिवर्तन) सीमा को मैन्युअल रूप से समायोजित करें स्केल एनीमेशन।


हाय वाल्टर। मैंने onAimimationEnd को ओवरराइट कर दिया है, लेकिन मुझे नहीं पता कि एनीमेशन के पैमाने से मेल खाने के लिए "वास्तविक" सीमा को कैसे समायोजित किया जाए। मुझे पता है कि मैं क्या चाहता हूं कि मैं इसे समाप्त कर दूं, लेकिन मैं फ़ंक्शन को "setWidth ()" या "setHeight ()" में नहीं ढूंढ सकता।
जस्टिन जूल 28'10

1
मेरा मानना ​​है कि उन लेआउट लेआउट में संग्रहीत हैं। आपको करने में सक्षम होना चाहिए view.getLayoutParams().width = newWidth; view.getLayoutParams().height = newHeight; view.requestLayout();। (उत्तरार्द्ध कॉल दृश्य वृक्ष को सूचित करने के लिए आवश्यक है कि इसे पुनर्गणना करने की आवश्यकता है।)
वाल्टर मुंड

2
यह चीजों को करने का एक अविश्वसनीय रूप से गोल चक्कर है। सभी को करने की जरूरत है सेट विशेषताओं android:fillEnabledऔर android:fillAfterदोनों सच हो।
नील ट्रफ्ट

1

दरअसल, आप जिस एनीमेशन का उपयोग कर रहे हैं, वह एंड्रॉइड फ्रेमवर्क में एम्बेडेड है, मुझे यकीन नहीं है कि आप इसमें कुछ भी बदल सकते हैं।
हालाँकि, आप दस्तावेज़ में उदाहरण का अनुसरण करके अपना स्वयं का एनीमेशन बना सकते हैं । और आपको एंड्रॉइड डालना होगा: fillAfter = "true" यदि आप चाहते हैं कि स्केलिंग एनीमेशन के अंत के बाद रखी जाए।


2
scaleUp150 एक कस्टम एनीमेशन है जिसे मैंने xml में लिखा था (हालाँकि यह बेहद बुनियादी है)। मैंने एंड्रॉइड डाला: fillAfter = "true" एनीमेशन के अंदर लेकिन यह अभी भी मूल आकार में वापस आ गया है: S
justinl

1

Android डालें: SET टैग में fillAfter = "true" - जैसा कि उन्हें एनीमेशन टैग में डालकर उन्हें "पैरामीटर्स पैरामीटर्स" या "पैरामीटर्स को ऐनिमेट करते समय" के रूप में परिभाषित करता है। SET में पैरामीटर उस परिवर्तन को लागू करेंगे जो आप एनिमेशन के पूरा होने के बाद देख रहे हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.