2009-06-18 10 views
9

मैं एक अनुवाद एनीमेशन का उपयोग कर स्क्रीन के बाईं ओर से एक छवि दृश्य को एनिमेट कर रहा हूं। ImageView फ्रेमलेआउट का उपयोग करके मेरे मुख्य लेआउट के शीर्ष पर एक रिलेटिवलाउट के अंदर है।मेरी एनीमेशन एक निशान क्यों छोड़ रहा है?

जब मैं एमुलेटर सब कुछ पर एनीमेशन चलाने बहुत अच्छी तरह से काम करता है लेकिन जब मैं अपने G1 पर इसे चलाने का उपयोग करें इसके पीछे दृश्य कलाकृतियों छोड़ देता है और प्रभाव इसके पीछे पाठ घटक का प्रतिपादन।

यह भी महत्वाकांक्षी एक प्रदर्शन मुद्दा है और मैं जा रहा हूँ या यह एक बग मैं दूर कर सकते हैं क्या है?

यदि यह एक प्रदर्शन मुद्दा है तो क्या मैं चीजों को बेहतर बनाने के लिए कुछ भी कर सकता हूं?

+4

में चाहते लेने क्या आप हमारे लिए देखने के लिए कोई कोड प्रदान कर सकते हैं? क्या आप फ्रेम लेआउट के साथ कुछ और कर रहे हैं? एसडीके का कौन सा संस्करण आप उपयोग कर रहे हैं (यानी कपकेक?) – jamesh

+0

क्या यह कक्षा आप उपयोग कर रहे हैं? http://developer.android.com/reference/android/view/animation/TranslateAnimation.html –

+0

अच्छा सवाल, मुझे यह समस्या भी मिली है, लेकिन यह एमुलेटर में भी दिखाती है! यह तब होता है जब मैं फ़्रेमलेआउट में दृश्य के 3 डी रोटेशन को एनिमेट कर रहा हूं, शायद यह फ़्रेमलेआउट का फ़ंक्शन/बग है? मैं यह देखने जा रहा हूं कि क्या मैं सतह दृश्य का उपयोग कर सकता हूं ... – Andy

उत्तर

3

मैं अब इस एक छोटे से पुराना हो सकता है, लेकिन मैं सिर्फ इस पाया:

http://groups.google.com/group/android-developers/browse_thread/thread/5481450f8b71a26c/e750730b9953d9a8?lnk=gst&q=animation+leaves+trails#e750730b9953d9a8

सुनिश्चित नहीं हैं कि Android संस्करण अपने का उपयोग कर, लेकिन यह एंड्रॉयड पुस्तकालयों में एक बग हो सकता है!

ऐसा लगता है कि समस्या मेरे लिए क्या है! :)

... डोंचा सिर्फ इसे पसंद करते हैं जब यह आपकी गलती नहीं है! : डी

+0

लगभग निश्चित रूप से। अब कोड को रेट करने के लिए कोड नहीं है :(मैंने उस एनीमेशन को छोड़ दिया और एक ऐसे व्यक्ति के साथ चला गया जो एक निशान नहीं छोड़ेगा। –

0

वास्तव में देखकर समस्या है बिना लगता है कि आप अगले फ्रेम लिखने से पहले प्रदर्शन बफर समाशोधन नहीं कर रहे हैं। यह मेरे लिए एक प्रदर्शन मुद्दा की तरह नहीं लगता है।

क्या आपके पास नियंत्रण है कि डिवाइस डबल बफरिंग करता है या नहीं?

यह देखते हुए कि यह एमुलेटर पर काम करता है यह आपके एमुलेटर या आपके कोड में एक बग के साथ एक समस्या को इंगित कर सकता है जो एम्यूलेटर पर दिखाई नहीं दे रहा है (जो मुझे लगता है कि तकनीकी रूप से एमुलेटर के साथ समस्या है!) एक प्रदर्शन मुद्दे से।

+0

मैं एंड्रॉइड फ्रेमवर्क द्वारा प्रदान की गई एनीमेशन फ्रेमवर्क का उपयोग कर रहा हूं, इसलिए मेरे पास डबल बफरिंग या डिस्प्ले बफर पर न तो नियंत्रण है। मेरे लिए यह एक बग की तरह दिखता है। यदि यह एक प्रदर्शन मुद्दा था क्योंकि मेरी आवश्यकताएं बहुत महत्वाकांक्षी थीं तो एनीमेशन को झटकेदार होना चाहिए/कम फ्रेमरेट होना चाहिए। यह उचित रूप से अच्छा प्रदर्शन करता है, यह सिर्फ इसके पीछे की छवि के टुकड़ों की तरह दिखता है। वे काफी जल्दी साफ हो गए हैं लेकिन यह अच्छा नहीं लग रहा है। –

+0

@ टॉम - मुझे लगता है कि मैं जो सुझाव दे सकता हूं उसकी सीमा तक पहुंच गया हूं। मैं वास्तव में उस पर्यावरण को नहीं जानता जो आप विकसित कर रहे हैं - लेकिन मुझे पता है कि एनीमेशन ने कई वर्षों के लिए वास्तविक समय 3 डी ग्राफिक्स के साथ काम किया है और मुझे इसी तरह की ध्वनि समस्याएं आई हैं। लेकिन जैसा कि मैंने कहा, वास्तव में यह देखने के बिना कि समस्या का निदान करना मुश्किल है। – ChrisF

0

मैं एक SurfaceView एनीमेशन के लिए उपयोग करने का सुझाव होगा। यह डबल-बफर किया गया है, इसलिए यदि आप इसे सही तरीके से उपयोग करते हैं तो इसे झटके को खत्म करना चाहिए। यदि आप एक उदाहरण चाहते हैं, तो एसडीके में शामिल चंद्र लैंडर डेमो वास्तव में यह दिखाता है। साथ ही, यदि आपके पास कोड के साथ एक और अधिक विशिष्ट सवाल है, तो पूछें।

सामान्य एंड्रॉयड प्रदर्शन का सवाल है, वह उचित रूप से उच्च फ्रेम दर अधिक होने की बहुत संभव है, तो आप बहुत ज्यादा उम्मीद नहीं कर रहे हैं।

0

यह मेरे साथ भी हो रहा है। मैं Google एपीआई के साथ 1.6 का उपयोग कर एक एमुलेटर का उपयोग कर रहा हूं, और मैंने अभी पुष्टि की है कि यह एक Nexus One पर FRF83 चल रहा है।

Animation a = new TranslateAnimation(0.0f, 0.0f, 100.0f, 0.0f); 
a.setDuration(2000); 
this.myView.startAnimation(a); 

यहाँ देखने instantiating के लिए प्रासंगिक कोड है:: यहाँ प्रासंगिक कोड है

View v = new View(this.getApplication()); 
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, 80); 
v.setLayoutParams(params); 
v.setBackgroundColor(0xFFFF0000); 
// 
LinearLayout layout = (LinearLayout)this.findViewById(R.id.theLayout); 
layout.addView(v); 
// 
v.setOnClickListener(new View.OnClickListener() { 

     public void onClick(View arg0) { 
     // TODO Auto-generated method stub 
     doAnimation(); 
    } 
}); 
// 
myView = v; 

तो मूल रूप से, डबल बफरिंग आदि, ओएस द्वारा संभाला जा रहा है, और मैं इसे पर कोई नियंत्रण नहीं बिलकुल।

0

मुझे एंड्रॉइड 2.3 पर एक ही समस्या थी, इसलिए बग अभी भी मौजूद है। मैं एक पीएनजी के साथ एक छवि दृश्य का उपयोग कर रहा था जिसमें कुछ पारदर्शी हिस्से थे। अनुवाद एनीमेशन के साथ एनिमेटेड होने पर यह छविदृश्य ट्रेल्स छोड़ रहा था। इमेजव्यू के लिए खींचने वाली नकली पृष्ठभूमि का उपयोग करके निशान को हटा दिया गया (मैंने पृष्ठभूमि के रूप में एक ड्रॉइंग किया था)।

10

मुझे भी 2.3 पर एक ही समस्या का सामना करना पड़ रहा था।

एनीमेशन में चलने वाले दृश्य (लेआउट जिसमें चलती दृश्य रहता है) के कंटेनर को अमान्य कर रहा है। ApplyTransformation ने इसे मेरे लिए तय किया है।

देखें:

Android - Artifacts using Animation

+0

इस पुराने प्रश्न के वैकल्पिक समाधान को वापस रिपोर्ट करने के लिए धन्यवाद Matthijs ... –

+0

आपने अभी अपना दिन बचाया धन्यवाद :) –

2

यहाँ एक समाधान मैंने पाया कि मेरे लिए यह हल है: "एक आसान समाधान का पैड के लिए होगा एक छोटा सा के साथ अपनी छवि पर पारदर्शी क्षेत्र (1 पिक्सेल यह करना चाहिए) दाएं/नीचे - इसका कोई प्रभाव नहीं होगा कि यह कैसा दिखाई देगा, लेकिन यह वास्तविक छवि की तुलना में किसी क्षेत्र की अमान्यता को थोड़ा बड़ा करेगा और इस प्रकार बग की भरपाई करेगा। "

http://code.google.com/p/android/issues/detail?id=22151

+0

इस तक सबसे सरल समाधान तक। धन्यवाद! –

+0

यह एक काम करता है। यह नहीं पता कि यह क्यों होता है, क्योंकि मुख्य एंड्रॉइड डेवलपर्स में से एक ने लिखा है कि इसे पहले तय किया गया था: http://groups.google.com/group/android-developers/browse_thread/thread/5481450f8b71a26c/e750730b9953d9a8?lnk=gst&q=animation + पत्ते + ट्रेल्स # ई 750730b9953d9a8 –

+0

बहुत रोचक! मुझे लगता है कि यह वास्तविक से घनत्व स्वतंत्र पिक्सेल से रूपांतरण की वजह से काम करता है। कुछ ढीलेपन के लिए अदृश्य खातों की अंगूठी। –

0

मैं इस जेली बीन मैं गैलरी दृश्य में इस अनुभव कर रहा था कुछ एनीमेशन पालन करते हुए ही पर पता लगा। इसे और अधिक एक ड्राइंग नहीं मुद्दा cpu तरह लग रहा है ....

अपनी गतिविधि इंटरफ़ेस AnimatorListener को लागू करना ..... नीचे दी गई विधि को ओवरराइड और सकें कि आप अपनी दृश्य पुनः बनाने का

@Override 
public void onAnimationEnd(Animator animation) { 
    // TODO Auto-generated method stub 

    mView.requestLayout(); 
    Toast.makeText(this, "animation ended", 0).show(); 
} 

@Override 
public void onAnimationRepeat(Animator animation) { 
    // TODO Auto-generated method stub 
    mView.requestLayout(); 
} 

@Override 
public void onAnimationStart(Animator animation) { 
    // TODO Auto-generated method stub 
    mView.requestLayout(); 
} 
संबंधित मुद्दे