2011-02-11 19 views
7

मैं Android के एनीमेशन ढांचे का उपयोग करने के लिए एक हीरे की पैटर्न में मेरी imageView चाल है करने के लिए कोशिश कर रहा हूँ। यहाँ मेरी animation.xml है:एंड्रॉयड एनीमेशन एक्सएमएल मुद्दों

<set xmlns:android="http://schemas.android.com/apk/res/android" android:shareInterpolator="true"> 
<translate 
    android:fromXDelta="40%p" android:toXDelta="90%p" 
    android:fromYDelta="10%p" android:toYDelta="40%p" 
    android:duration="500" android:startOffset="0"/> 
<translate 
    android:fromXDelta="90%p" android:toXDelta="40%p" 
    android:fromYDelta="40%p" android:toYDelta="90%p" 
    android:duration="500" android:startOffset="500"/> 
<translate 
    android:fromXDelta="40%p" android:toXDelta="10%p" 
    android:fromYDelta="90%p" android:toYDelta="40%p" 
    android:duration="500" android:startOffset="1000"/> 
<translate 
    android:fromXDelta="10%p" android:toXDelta="40%p" 
    android:fromYDelta="40%p" android:toYDelta="10%p" 
    android:duration="500" android:startOffset="1500"/> 
</set> 

मेरे लेआउट:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> 
    <ImageView 
     android:id="@+id/img" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:src="@drawable/icon"/> 
</FrameLayout> 

और मेरे onStart:

protected void onStart() { 
    super.onStart(); 

    ImageView img = (ImageView)findViewById(R.id.img); 
    Animation a = AnimationUtils.loadAnimation(this, R.anim.diamond); 
    img.startAnimation(a); 
} 

जब मैं अपने आवेदन शुरू सब मैं देख तो 2 सेकंड के लिए एक खाली स्क्रीन है मेरी छवि स्क्रीन के ऊपरी-बाएं कोने में चली जाती है। यदि मैं सभी अनुवाद एनिमेशन में से एक को हटा देता हूं तो मैं छवि को एक विकर्ण रेखा में स्थानांतरित कर दूंगा।

मैं एनीमेशन को परिभाषित करने के लिए एक्सएमएल का उपयोग करना पसंद करूंगा, न कि जावा।

क्या किसी के पास कोई एनीमेशन है कि मैं पूरी एनीमेशन कैसे देख सकता हूं?

-Dan

+0

ऐसा प्रतीत होता है कि इसका "% p" उपयोग करने के साथ कुछ करना है। अगर मैं "% p" को "%" में बदलता हूं तो संपूर्ण एनीमेशन काम करता है लेकिन अब स्क्रीन के बहुत छोटे हिस्से तक ही सीमित है। दस्तावेज़ "%" के अनुसार वस्तु और "% पी" के संबंध में है वस्तु की मूल के संबंध जो वास्तव में जो मैं चाहता है में है। जो बताता है कि यह केवल एक छोटे से बॉक्स में एनीमेशन क्यों कर रहा है। – Dan

+0

आगे स्पष्टीकरण के लिए, मैं एनिमेटिंग के ImageView के अभिभावक के संबंध में अपनी एनीमेशन को परिभाषित करने के लिए एक्सएमएल का उपयोग करना चाहता हूं। मैं किसी भी उत्तर को स्वीकार नहीं करूंगा जो कहता है कि ढांचा टूट गया है, न ही मैं एक उत्तर स्वीकार करूंगा जिसके लिए जावा में एनीमेशन परिभाषित किया जाना आवश्यक है। – Dan

उत्तर

15

एनीमेशन विशेषताओं कि वे कहाँ हैं, जब वे शुरू करने के लिए सापेक्ष हैं। यह शायद एक बहुत आप क्या चाहते हैं के करीब है:

<?xml version="1.0" encoding="utf-8"?> 
<set xmlns:android="http://schemas.android.com/apk/res/android" android:shareInterpolator="true"> 
<translate 
    android:fromXDelta="40%p" android:toXDelta="90%p" 
    android:fromYDelta="10%p" android:toYDelta="40%p" 
    android:duration="500" android:startOffset="0"/> 
<translate 
    android:fromXDelta="0%p" android:toXDelta="-50%p" 
    android:fromYDelta="0%p" android:toYDelta="50%p" 
    android:duration="500" android:startOffset="500"/> 
<translate 
    android:fromXDelta="0%p" android:toXDelta="-30%p" 
    android:fromYDelta="0%p" android:toYDelta="-50%p" 
    android:duration="500" android:startOffset="1000"/> 
<translate 
    android:fromXDelta="0%p" android:toXDelta="30%p" 
    android:fromYDelta="0%p" android:toYDelta="-30%p" 
    android:duration="500" android:startOffset="1500"/> 
</set> 
+0

बढ़िया! इसने काम कर दिया! अपनी त्वरित प्रतिक्रिया के लिए धन्यवाद! – Dan

+0

हाय रूबेन स्क्रैटन, मैं बटन पर क्लिक करके इस एनीमेशन को रोकना चाहता हूं और फिर से क्लिक पर फिर से शुरू करना चाहता हूं। क्या यह संभव है? – Deepak

+0

सचमुच पूरे दिन इसको समझने की कोशिश कर रहा था। मैं हारने वाला था। समाधान के लिए धन्यवाद। – DroidT

1

इस प्रयास करें:

Animation anim = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.diamond); 
findViewById(R.id.img).setAnimation(anim); 
anim.start(); 

तुम भी शायद एक के बाद एक लोड करने के लिए एनिमेशन बदलना चाहिए। मुझे लगता है कि आपके द्वारा बनाया गया सेट एक ही समय में सभी एनिमेशन को चलाने का प्रयास करेगा, और यह बहुत अच्छा काम नहीं करेगा।

उपयोग इस तरह एक animationListener:

anim.setAnimationListener(new Animation.AnimationListener() { 

     public void onAnimationStart(Animation animation) { 
     } 

     public void onAnimationEnd(Animation animation) { 
      Animation anim = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.diamond2); 
      findViewById(R.id.img).setAnimation(anim); 
      anim.start(); 
     } 

     public void onAnimationRepeat(Animation animation) { 
     } 
    }); 
+0

इसका मेरे लिए कोई प्रभाव नहीं पड़ा। दस्तावेज़ (http://developer.android.com/guide/topics/resources/animation-resource.html) के अनुसार, मुझे एनीमेशन पर स्टार्टऑफसेट निर्दिष्ट करने में सक्षम होना चाहिए जो मुझे एनीमेशन 'चेन' करने की अनुमति देनी चाहिए जिस तरह से मैंने दिखाया है। – Dan

1

इस एक यह काम करता है का उपयोग करें, मैं hve परीक्षण किया यह

<set xmlns:android="http://schemas.android.com/apk/res/android" android:shareInterpolator="true"> 
    <translate 
     android:fromXDelta="40%p" android:toXDelta="90%p" 
     android:fromYDelta="10%p" android:toYDelta="40%p" 
     android:duration="500" android:startOffset="0" 
     /> 
    <translate 
     android:fromXDelta="0%p" android:toXDelta="-40%p" 
     android:fromYDelta="0%p" android:toYDelta="40%p" 
     android:duration="500" android:startOffset="500"/> 
    <translate 
     android:fromXDelta="0%p" android:toXDelta="-40%p" 
     android:fromYDelta="0%p" android:toYDelta="-40%p" 
     android:duration="500" android:startOffset="1000"/> 
    <translate 
     android:fromXDelta="0%p" android:toXDelta="40%p" 
     android:fromYDelta="0%p" android:toYDelta="-40%p" 
     android:duration="500" android:startOffset="1500"/> 
    </set> 
0

इस एनीमेशन एक्सएमएल कोड का प्रयोग करें। यह काम करता है:

<set xmlns:android="http://schemas.android.com/apk/res/android" android:shareInterpolator="true"> 
<translate 
    android:fromXDelta="40%" android:toXDelta="90%" 
    android:fromYDelta="10%" android:toYDelta="40%" 
    android:duration="500" android:startOffset="0"/> 
<translate 
    android:fromXDelta="90%" android:toXDelta="40%" 
    android:fromYDelta="40%" android:toYDelta="90%" 
    android:duration="500" android:startOffset="500"/> 
<translate 
    android:fromXDelta="40%" android:toXDelta="10%" 
    android:fromYDelta="90%" android:toYDelta="40%" 
    android:duration="500" android:startOffset="1000"/> 
<translate 
    android:fromXDelta="10%" android:toXDelta="40%" 
    android:fromYDelta="40%" android:toYDelta="10%" 
    android:duration="500" android:startOffset="1500"/> 
</set> 
संबंधित मुद्दे