TranslateAnimation
एक निर्दिष्ट राशि से एक दिशा में "खींच" द्वारा काम करता है। आप यह सेट कर सकते हैं कि इस "पुलिंग" को कहां से शुरू किया जाए और कहां खत्म किया जाए।
TranslateAnimation(fromXDelta, toXDelta, fromYDelta, toYDelta);
fromXDelta ने एक्स अक्ष में आंदोलन की प्रारंभिक स्थिति की भरपाई की।
fromXDelta = 0 //no offset.
fromXDelta = 300 //the movement starts at 300px to the right.
fromXDelta = -300 //the movement starts at 300px to the left
एक्सएक्सडेल्टा एक्स अक्ष में आंदोलन की ऑफसेट समाप्ति स्थिति को परिभाषित करता है।
toXDelta = 0 //no offset.
toXDelta = 300 //the movement ends at 300px to the right.
toXDelta = -300 //the movement ends at 300px to the left.
यदि आपके पाठ की चौड़ाई अधिक है कि fromXDelta और toXDelta के बीच अंतर का मॉड्यूल, पाठ स्क्रीन के भीतर समग्र और उचित रूप से स्थानांतरित करने में सक्षम नहीं होगा।
उदाहरण
मान लें कि हमारी स्क्रीन का आकार 320x240 px है। हमारे पास एक TextView टेक्स्ट है जिसमें 700px चौड़ाई है और हम एक एनीमेशन बनाना चाहते हैं जो टेक्स्ट को "खींच" ताकि हम वाक्यांश के अंत को देख सकें।
(screen)
+---------------------------+
|<----------320px---------->|
| |
|+---------------------------<<<< X px >>>>
movement<-----|| some TextView with text that goes out...
|+---------------------------
| unconstrained size 700px |
| |
| |
+---------------------------+
+---------------------------+
| |
| |
<<<< X px >>>>---------------------------+|
movement<----- some TextView with text that goes out... ||
---------------------------+|
| |
| |
| |
+---------------------------+
पहले हम सेट करते हैं fromXDelta = 0
ताकि आंदोलन की शुरुआत न हो। अब हमें toXDelta मान का पता लगाने की आवश्यकता है। वांछित प्रभाव को प्राप्त करने के लिए हमें पाठ को ठीक उसी px को "खींचने" की आवश्यकता है जिसे वह स्क्रीन से बाहर फैलाता है। (इस योजना में <<<< X px >>>> का प्रतिनिधित्व किया गया है) क्योंकि हमारे पाठ की चौड़ाई 700 है, और दृश्य क्षेत्र 320px (स्क्रीन की चौड़ाई) है जो हमने निर्धारित किया है:
tXDelta = 700 - 320 = 380
और हम स्क्रीन की चौड़ाई और टेक्स्ट चौड़ाई को कैसे आंकते हैं?
कोड
ज़रा स्निपेट को एक प्रारंभिक बिंदु के रूप में लेना:
/**
* @param view The Textview or any other view we wish to apply the movement
* @param margin A margin to take into the calculation (since the view
* might have any siblings in the same "row")
*
**/
public static Animation scrollingText(View view, float margin){
Context context = view.getContext(); //gets the context of the view
// measures the unconstrained size of the view
// before it is drawn in the layout
view.measure(View.MeasureSpec.UNSPECIFIED,
View.MeasureSpec.UNSPECIFIED);
// takes the unconstrained wisth of the view
float width = view.getMeasuredWidth();
// gets the screen width
float screenWidth = ((Activity) context).getWindowManager().getDefaultDisplay().getWidth();
// perfrms the calculation
float toXDelta = width - (screenWidth - margin);
// sets toXDelta to 0 if the text width is smaller that the screen size
if (toXDelta < 0) {toXDelta = 0; } else { toXDelta = 0 - toXDelta;}
// Animation parameters
Animation mAnimation = new TranslateAnimation(0, toXDelta, 0, 0);
mAnimation.setDuration(15000);
mAnimation.setRepeatMode(Animation.RESTART);
mAnimation.setRepeatCount(Animation.INFINITE);
return mAnimation;
}
इसे करने के आसान तरीके हो सकते हैं, लेकिन यह आपके विचार के लिए काम करता है और पुन: प्रयोज्य है। यह विशेष रूप से उपयोगी है यदि आप टेक्स्ट व्यू के सक्षम / ऑनफोकस क्षमताओं को तोड़ने के बिना एक सूची दृश्य में एक पाठ दृश्य को चेतन करना चाहते हैं। यदि दृश्य केंद्रित नहीं है तो भी यह लगातार स्क्रॉल करता है।