2011-09-02 14 views
17

मैंने Translate Animation का उपयोग करके सफलतापूर्वक एक तरफ एनीमेशन किया है जिसका अर्थ है कि छवि शीर्ष से नीचे तक जाती है।Android में अनुवाद एनीमेशन का उपयोग करके लगातार छवि को ऊपर और नीचे कैसे स्थानांतरित करें?

private ImageView mScanner; 
private Animation mAnimation; 

@Override 
public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    mScanner = (ImageView)findViewById(R.id.Scanner); 

    mAnimation = new TranslateAnimation(0, 0, 0, 500); 
    mAnimation.setDuration(10000); 
    mAnimation.setFillAfter(true); 
    mAnimation.setRepeatCount(-1); 
    mAnimation.setRepeatMode(Animation.REVERSE); 
    mScanner.setAnimation(mAnimation); 
    mScanner.setVisibility(View.VISIBLE); 
} 

अब मैं चाहता हूँ कि जब छवि को स्क्रीन के नीचे तक पहुँच जाता है, यह वापस ऊपर बढ़ रहा शुरू कर देना चाहिए: यहाँ कोड है। मैं उसे कैसे कर सकता हूँ?

नोट: रिवर्स मोड हो गया। कृपया कोड देखें। लेकिन अब समस्या यह है कि, नीचे से ऊपर तक जाने पर यह रेखाएं छोड़ देता है। संलग्न छवि की तरह। इस लाइन को कैसे हटाएं? screenshot

+0

मेरा समाधान देखें: http://stackoverflow.com/a/38934624/2535875 –

उत्तर

33

इस के अनुसार अपने कोड को संशोधित करें:

mScanner.setVisibility(View.VISIBLE); 
    mAnimation = new TranslateAnimation(
      TranslateAnimation.ABSOLUTE, 0f, 
      TranslateAnimation.ABSOLUTE, 0f, 
      TranslateAnimation.RELATIVE_TO_PARENT, 0f, 
      TranslateAnimation.RELATIVE_TO_PARENT, 1.0f); 
    mAnimation.setDuration(10000); 
    mAnimation.setRepeatCount(-1); 
    mAnimation.setRepeatMode(Animation.REVERSE); 
    mAnimation.setInterpolator(new LinearInterpolator()); 
    mScanner.setAnimation(mAnimation); 

और इसके अलावा छवि के बजाय एक्सएमएल का उपयोग करें। कृपया नीचे दिए गए कोड को देखें और इसे अपने ImageView src में रखें।

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="line"> 
    <solid android:color="#0000FF"/> 
    <size android:width="480dp" 
     android:height="10dp"/> 
    <corners android:radius="1dp"/> 
    <stroke android:width="3dp" 
     android:color="#000000"/> 
</shape> 

मुझे आशा है कि इससे आपकी मदद मिलेगी।

+1

बिल्कुल सही। मैंने एक्सएमएल को शामिल किया और 'mAnimation.setFillAfter (true) को हटा दिया;' रेखा और यह वांछित काम करता था। सहायता के लिए धन्यवाद। –

+1

अरे आपका कोड 2.3.6 पर काम नहीं कर रहा है। – sandy

+0

@ सैंडी मैंने इस कोड को 2.1 से 4.2 तक चेक किया और यह मेरे सभी उपकरणों में काम कर रहा है। कृपया छवि का उपयोग करने की कोशिश न करें क्योंकि मुझे छवि के साथ समस्या हो रही थी और फिर मैंने प्रोजेक्ट में उपयोग की गई छवि के प्रतिस्थापन के रूप में 'XML' आधारित बनाई गई रेखा का उपयोग किया। कृपया अपना कोड जांचें और एक और बार कोशिश करें। धन्यवाद –

2

मुझे लगता है कि आपको mAnimation.setFillAfter(true); को हटाना होगा क्योंकि इसका मतलब है कि यह स्थायी रूप से रहेगा जहां यह रुक जाएगा।

प्रारंभिक स्थिति पर लौटने के लिए, या तो आप ऊपर और नीचे दोनों के लिए एक पूर्ण एनीमेशन सेट बना सकते हैं, या दो अलग कर सकते हैं और जब पहली बार खत्म हो जाएंगे, तो दूसरा शुरू करें, हालांकि अनुसरण करने का कोई कारण नहीं है इस तरह का एक दृष्टिकोण। repeatMode

पूर्णांक:

+0

मैंने जो कुछ भी किया है उसे बनाया है, लेकिन अब मुझे नई समस्या मिल रही है जिसके लिए मैंने एक छवि संलग्न की है। मैंने अपना प्रश्न अपडेट किया है। कृपया एक नज़र डालें। धन्यवाद –

7

आप दोहराने संपत्ति

एंड्रॉयड सेट करना होगा। एनीमेशन के अंत तक पहुंचने पर एनीमेशन कैसे व्यवहार करता है। एंड्रॉइड: इस विशेषता के प्रभाव के लिए दोहराना गणना को सकारात्मक पूर्णांक या "-1" पर सेट किया जाना चाहिए। प्रत्येक पुनरावृत्ति के साथ एनीमेशन रिवर्स दिशा रखने के लिए "रिवर्स" पर सेट करें या प्रत्येक बार शुरुआत से एनीमेशन लूप रखने के लिए "दोहराएं"।

Animation a; 
a.setRepeatMode(Animation.REVERSE); 
+0

यह काम करता है लेकिन रिवर्स दिशा चलते समय एक रेखा को छोड़कर नीचे से ऊपर तक का मतलब है। इस लाइन को कैसे निकालें ताकि ऐसा लगता है कि यह स्कैनिंग है। मैंने अपना कोड अपडेट किया है और छवि को भी संलग्न किया है। धन्यवाद –

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