2012-06-16 25 views
5

मुझे दृश्य के स्थान मान प्राप्त करने के कई तरीके पता हैं।एंड्रॉइड: अनुवाद एनीमेशन के बाद दृश्य की नवीनतम स्थिति प्राप्त करने का कोई तरीका है?

getLocationOnScreen() 
getLocationInWindow() 
getLeft() 

हालांकि, उनमें से कोई भी वास्तव में देखें मैं startAnimation द्वारा ले जाया गया() विधि के वर्तमान स्थान है, लेकिन केवल मूल स्थान देता है।

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

public class AndroidTestActivity extends Activity implements OnClickListener { 
LinearLayout testView; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    testView = (LinearLayout) this.findViewById(R.id.test); 
    testView.setOnClickListener(this); 
} 

public void onClick(View v) { 
    int[] pLoS = new int[2]; 
    testView.getLocationOnScreen(pLoS); 
    TranslateAnimation move = new TranslateAnimation(pLoS[0], pLoS[0] + 10, 0f, 0f); 
    move.setFillAfter(true); 
    move.setFillEnabled(true); 
    testView.startAnimation(move); 
} 

} 

जैसा कि आप देख, इस रूप में मैं इरादा, getLocationOnScreen के बाद से काम नहीं करता है() हमेशा एक ही मान देता है (मेरे मामले में, 0), और मूल्य मैं TranslateAnimation में इस्तेमाल किया प्रतिबिंबित doen't ..

कोई विचार?

उत्तर

2

मान लें कि आप एंड्रॉइड < 3.0 का उपयोग कर रहे हैं तो आपका प्रश्न मेरे पास इसी तरह से हो सकता है कि मैंने here से पूछा। असल में एनिमेशन स्वयं दृश्य से अलग होते हैं यानी एंड्रॉइड आपके दृश्य की एक प्रति एनिमेट करता है। यही कारण है कि getLocationOnScreen() हमेशा 0 देता है। यह दृश्य नहीं है (एनिमेटेड) यह प्रतिलिपि (एनिमेटेड) की प्रतिलिपि थी। यदि आप मेरे प्रश्न के उत्तर देखते हैं तो इस मुद्दे को एंड्रॉइड के बाद के संस्करणों में संबोधित किया गया है।

+0

धन्यवाद एक गुच्छा। – Quv

0

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

नई स्थिति प्राप्त करने का एकमात्र तरीका इसकी गणना करके है।

+0

धन्यवाद। मैं एक सरणी का उपयोग करता हूं और इसे स्वयं से गणना करता हूं ... – Quv

2

ठीक है, अगर आप यह देखने की कोशिश कर रहे हैं कि दृश्य एनीमेशन के दौरान/उसके बाद दृश्य कितने पिक्सल स्थानांतरित हो गया है, तो आप एनीमेशन पर ट्रांसफ़ॉर्मेशन ऑब्जेक्ट खोल सकते हैं।

यहाँ एक उदाहरण AnimationListener का उपयोग कर रहा है:

animation.setAnimationListener(new Animation.AnimationListener() { 
     @Override 
     public void onAnimationStart(Animation animation) { 
     } 

     @Override 
     public void onAnimationEnd(Animation animation) { 
      Transformation trans = new Transformation(); 
      // startTime + duration = end of animation 
      int endTime = animation.getStartTime()+animation.getDuration(); 
      animation.getTransformation(endTime, trans); 

      Matrix transformationMatrix = trans.getMatrix(); 
      float[] matrixVals = new float[9]; 
      transformationMatrix.getValues(matrixVals); 
      float xTraveled = matrixVals[2]; 
      float yTraveled = matrixVals[5]; 
      // do something with them here... 
     } 

     @Override 
     public void onAnimationRepeat(Animation animation) { 
     } 
    }); 

मैं इन के लिए सरणी सूचकांकों में बिल्कुल सही नहीं हो सकता है, निश्चित रूप से Matrix.toString (का उपयोग करें) और मूल्यों अपने आप को देखो। xTraveled और yTraveled आपको इंगित समय पर अनुवाद एनीमेशन द्वारा यात्रा की दूरी प्रदान करेगा (इस मामले में, एनीमेशन के अंत में)।