2014-11-17 3 views
7

मेरे पास एक रीसाइक्लिंग है जिसमें कई विचार हैं और एक एनीमेशन व्यू है जिसमें एनीमेशन लागू है। एक बार दृश्य स्क्रीन से बाहर हो जाने पर एनीमेशन अब सक्रिय नहीं होता है, भले ही एनीमेशन अभी भी मौजूद है।स्क्रीन से बाहर देखने पर एंड्रॉइड व्यू एनीमेशन बंद हो जाता है

डेटा:

rotate_around_center_point.xml

<?xml version="1.0" encoding="utf-8"?> 
<set xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shareInterpolator="false" > 

    <rotate 
     android:duration="2500" 
     android:interpolator="@android:anim/linear_interpolator" 
     android:pivotX="50%" 
     android:pivotY="50%" 
     android:repeatCount="infinite" 
     android:repeatMode="restart" 
     android:toDegrees="360" /> 

</set> 

लागू करना एनीमेशन:

   animation = AnimationUtils.loadAnimation(this.getContext(), 
         R.anim.rotate_around_center_point); 
       loadingRotatingCircleIV.startAnimation(animation); 

मैं एक घटना को पकड़ने के लिए किसी भी तरह से जब एनीमेशन तो मैं कर रहा हूँ बाधित है नहीं पा सके एक बार स्क्रीन से बाहर होने के बाद एनीमेशन को पुनरारंभ करने में सक्षम।

उत्तर

0

मैं अभी भी वही काम कर रहा हूं, और एक ही समस्या है। तो सवाल यह है कि स्क्रीन पर दृश्य वापस आने के बाद एनीमेशन को पुनरारंभ कैसे करें।

मुझे "loadingRotatingCircleIV.startAnimation (एनीमेशन)" कॉल करके समस्या 99% हल हो गई है; " जब भी यह मेरे एनिमेटेड दृश्य की स्थिति के लिए बुलाया जाता है, तो प्रत्येक बार BindViewHolder पर।

लेकिन बस एक छोटी सी छोटी समस्या बाकी है। यदि आप थोड़ी सी तक स्क्रॉल करते हैं, तो दृश्य स्क्रीन बंद हो जाता है, लेकिन जब आप बैक अप स्क्रॉल करते हैं, तो धारक को पुनर्नवीनीकरण नहीं मिलता है, पर बाइंडव्यूहोल्डर को स्पष्ट रूप से फिर से नहीं कहा जाता है, लेकिन एनीमेशन बंद हो जाता है .. तो मैं हूं

public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { 
... 
     if (position=="animated_view_position") view.startAnimation(animation); 
... 
} 

किसी एक बेहतर समाधान है, तो कृपया मदद: अभी भी ठीक करने के लिए है कि एक ..

तो, मेरे वर्तमान समाधान की कोशिश कर रहा।

3

रीसाइक्लर व्यू दृश्य पर एनीमेशन को गलत तरीके से रोक रहा है जब दृश्य केवल तभी दिखाई देता है जब आप उस दृश्य में एनीमेशन देखें। यदि आप संपत्ति एनीमेशन का उपयोग करेंगे तो सब ठीक से काम करता है। तो निम्नलिखित समाधान काम करेंगे:

ObjectAnimator animator = ObjectAnimator.ofFloat(loadingRotatingCircleIV, "rotation", 0.0f, 360.0f); 
animator.setDuration(1000L); 
animator.setRepeatCount(ObjectAnimator.INFINITE); 
animator.setInterpolator(new LinearInterpolator()); 
animator.start(); 
2

आप एक RecyclerView आइटम के लिए एक ViewAnimation का उपयोग करना चाहते हैं, तो आप की ओवरराइड विधि में एनीमेशन बहाल करने के लिए है RecyclerView - onViewAttachedToWindow (ItemViewHolder धारक), जैसे:

@Override 
public void onViewAttachedToWindow(ItemViewHolder holder) { 
    super.onViewAttachedToWindow(holder); 

    if (holder.animated) 
    { 
     Animation anim = new ScaleAnimation(0.8f, 1.2f, 
      0.8f, 1.2f, 
      Animation.RELATIVE_TO_SELF, 0.5f, 
      Animation.RELATIVE_TO_SELF, 0.5f); 
     anim.setFillAfter(true); 
     anim.setInterpolator(new BounceInterpolator()); 
     anim.setDuration(1100); 
     anim.setRepeatCount(Animation.INFINITE); 
     anim.setRepeatMode(Animation.REVERSE); 
     holder.animatedView.startAnimation(anim); 
    } 
} 
0
create **HashMap<Integer, Boolean>** for saving each items animation loaded status 

construct(){ 
for(int c = 0; c < adapterDataList.size(); c++){ 
//Here is create default status of animation loaded status used Boolean to saving 
} 
} 

//Call Start Animation with onViewAttachedToWindow 
@Override 
public void onViewAttachedToWindow(ItemViewHolder holder) { 
    super.onViewAttachedToWindow(holder); 

// get HashMap of each items Animation status like this 
if(!HashMap.get(position)){ //FALSE means animation not loaded yet 
//Here should call start Animation method; 
} else { 
//Here call no animation method, like setImageDrawable etc... 
} 

    //create an AnimationListener for each item, when an animation is End, Listener should call a method to change HashMap above which you just created, like this **HashMap.put(position, Boolean.valueOf(true))** //TRUE means animation loaded 
} 

// स्थिति मूल्य प्राप्त करने के रूप में पूर्णांक holder.getLayoutPosition()

का उपयोग
+0

धारक का उपयोग करें .setTag विधि भी इस समस्या को हल कर सकती है, बस उस व्यक्ति को चुनें जिसे आप आसान सोचते हैं। – chundk

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