2015-01-17 7 views
6

मैं एंड्रॉइड में शॉपिंग एप्लिकेशन बना रहा हूं। मेरे ऐप में, मैं कस्टम सूची दृश्य से वस्तुओं की सूची दिखाता हूं।कस्टम सूचीदृश्य टेक्स्ट एनीमेशन कैसे कार्यान्वित करें

यदि ग्राहक कोई आइटम चुनता है, तो चयनित आइटम टेक्स्ट सूचीदृश्य से शॉपिंग कार्ट छवि में जाता है। नीचे छवि की तरह,

इस प्रकार की एनीमेशन मेरी आवश्यकता है। enter image description here

लेकिन मेरी एनिमेटेड दृश्य कस्टम पंक्ति के अंत में बंद कर दिया .. इस छवि की तरह।

enter image description here

मेरे animation.xml कोड,

<?xml version="1.0" encoding="utf-8"?> 
<set 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:interpolator="@android:anim/linear_interpolator" 
android:fillAfter="true" 
> 

<translate 
    android:fromYDelta="0%p" 
    android:toYDelta="100%p" 
    android:fromXDelta="0%p" 
    android:toXDelta="100%p" 
    android:duration="1000" 

    /> 

<alpha 
    android:duration="500" 
    android:fromAlpha="1.0" 
    android:interpolator="@android:anim/accelerate_interpolator" 
    android:toAlpha="0.0" /> 

    <scale 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:duration="3500" 
    android:fromXScale="1.0" 
    android:fromYScale="1.0" 
    android:toXScale="0.0" 
    android:toYScale="0.2" > 
</scale> 

</set> 

नोट: तो किसी को भी अधिक कोड मैं बाद में पोस्ट .. चाहते हैं, क्योंकि पहले से ही इस qtn अधिक लंबाई ले ..

मेरा प्रश्न,

मेरा एनिमेटेड टेक्स्टव्यू कस्टम पंक्ति के बाध्य से अधिक नहीं हो सकता है।

तो छवि के अंत में कस्टम पंक्ति टेक्स्टव्यू कैसे स्थानांतरित करें (शॉपिंग कार्ट छवि)?

+2

ऐसा इसलिए है क्योंकि दृश्य केवल इसकी सीमाओं के अंदर एनिमेट करता है। आप अपने विचारों को एनिमेट करने वाले सभी चीज़ों के शीर्ष पर एक खाली 'रिलेवेटिवआउट' बनाएं। – Simas

+0

मेरी टिप्पणी फिर से पढ़ें। – Simas

+0

'रिलेवेटिवआउट 'स्क्रीन पर फैल जाएगा, इसलिए पंक्ति कहीं से भी एनीमेशन शुरू कर सकती है। एनिमेटिंग दृश्य के बजाय – Simas

उत्तर

5

लक्ष्य एक स्थान से दूसरे स्थान पर दृश्य को एनिमेट करना है, इसलिए सबसे पहले हमें दो बिंदु प्राप्त करने की आवश्यकता है। आप निम्न कार्य कर सकते हैं:

int[] screenLocation = new int[2]; 
textView.getLocationOnScreen(screenLocation); 
int startX = screenLocation[0]; 
int startY = screenLocation[1]; 

int[] screenLocationB = new int[2]; 
cartView.getLocationOnScreen(screenLocationB); 
int endX = screenLocationB[0]; 
int endY = screenLocationB[1]; 

एक बार जब आप TextView के प्रारंभिक स्थान और स्थान आप इसे (cartview का स्थान) पर समाप्त करना चाहते हैं दोनों है, तो हम एक बिंदु दो अगले से चेतन की जरूरत है। हम खिड़की परत या अपनी सूचीदृश्य के ऊपर एक फ़्रेमेलआउट पर एक नया टेक्स्टव्यू डालकर ऐसा कर सकते हैं।

यहाँ हम खिड़की परत में जोड़ते समय:

WindowManager.LayoutParams layoutParams = new WindowManager.LayoutParams(); 
layoutParams.width = view.getMeasuredWidth(); 
layoutParams.height = view.getMeasuredHeight(); 
activity.addContentView(newTextView, layoutParams); 

अगला हम प्रारंभिक स्थिति निर्धारित किया है।

newTextView.setTranslationX(startX); 
newTextView.setTranslationY(startY); 

अंत में हम एनिमेट करते हैं।

newTextView.animate().setDuration(300) 
     .translationX(endX).translationY(endX).start() 
+0

वास्तव में सहायक .. धन्यवाद @ मार्क हेदरिंगटन – Araju

1

टेक्स्टव्यू के मूल दृश्य पर android:clipChildren="false" सेट करें और साथ ही साथ किसी भी दादाजी दृश्य को उस श्रेणी को शामिल करें जिसमें आप अंदर एनिमेट करना चाहते हैं।

+0

अफसोस की बात यह कुछ भी नहीं बदली .. –

2

मुझे विश्वास है कि this वह है जो आप देख रहे हैं। आप नामक कुछ का उपयोग कर सकते हैं ओवरले देखें। आपको जो चाहिए वह पहली एनीमेशन के समान है जहां बटन स्क्रीन के नीचे से फ्रेम के नीचे गिर रहा है।

सारांश आप कंटेनर ठीक से पहचान करने की जरूरत है

final Button button = (Button) findViewById(R.id.button); 

    button.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View arg0) { 
      // Our button is added to the parent of its parent, the most top-level layout 
      final ViewGroup container = (ViewGroup) button.getParent().getParent(); 
      container.getOverlay().add(button); 

      ObjectAnimator anim = ObjectAnimator.ofFloat(button, "translationY", container.getHeight()); 

      //You dont need rotation 
      ObjectAnimator rotate = ObjectAnimator.ofFloat(button, "rotation", 0, 360); 
      rotate.setRepeatCount(Animation.INFINITE); 
      rotate.setRepeatMode(Animation.REVERSE); 
      rotate.setDuration(350); 

      /* 
      * Button needs to be removed after animation ending 
      * When we have added the view to the ViewOverlay, 
      * it was removed from its original parent. 
      */ 
      anim.addListener(new AnimatorListener() { 

       @Override 
       public void onAnimationStart(Animator arg0) { 
       } 

       @Override 
       public void onAnimationRepeat(Animator arg0) { 
       } 

       @Override 
       public void onAnimationEnd(Animator arg0) { 
        container.getOverlay().remove(button); 
       } 

       @Override 
       public void onAnimationCancel(Animator arg0) { 
        container.getOverlay().remove(button); 
       } 
      }); 

      anim.setDuration(2000); 

      AnimatorSet set = new AnimatorSet(); 
      set.playTogether(anim, rotate); 
      set.start(); 
     } 
    }); 

आपके मामले में नीचे के रूप में है। यह गतिविधि का मूल दृष्टिकोण होना चाहिए। उदाहरण में बटन यह भी देखता है कि आप एनिमेटिंग (गीत नाम) होंगे। अंत में अपनी आवश्यकता के अनुसार अनुवाद करें।

+0

लेकिन यह न्यूनतम एपीआई स्तर 18+ .. :( –

+1

मैंने पुराने एपीआई में समर्थन की तलाश की और समर्थन लाइब्रेरी में कुछ भी नहीं मिला। –

+0

एक आखिरी बात। उपयोगकर्ता 3249477 की तरह पहले आप एक रिश्तेदार पैरेंट लेआउट बनाते हैं। फिर आप क्लिक पर व्यू की बिटमैप प्रति प्राप्त करने के लिए getDrawingCache विधि का उपयोग करते हैं, इसे एक नई छवि दृश्य में असाइन करें, इसे पैरेंट में जोड़ें और अपनी स्क्रीन पर इस छवि दृश्य को एनिमेट करें। –

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