TranslateAnimation
뷰를 지정된 양만큼 한 방향으로 "당겨"작동합니다. 이 "풀링"을 시작할 위치와 끝점을 설정할 수 있습니다.
TranslateAnimation(fromXDelta, toXDelta, fromYDelta, toYDelta);
fromXDelta는 X 축에서 이동 시작 위치의 오프셋을 설정합니다.
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는 X 축에서 이동의 오프셋 종료 위치를 정의합니다.
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 픽셀이라고 가정 해 보겠습니다. 너비가 700px 인 텍스트가있는 TextView가 있고 문구의 끝을 볼 수 있도록 텍스트를 "당기는"애니메이션을 만들고 싶습니다.
(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 값을 계산해야합니다. 원하는 효과를 얻으려면 텍스트가 화면 밖으로 확장되는 것과 똑같은 픽셀을 "당겨"야합니다. (구성표에서 <<<< X px >>>>로 표시됩니다.) 텍스트 너비가 700이고 가시 영역이 320px (화면 너비)이므로 다음을 설정합니다.
tXDelta = 700 - 320 = 380
그리고 화면 너비와 텍스트 너비를 어떻게 계산할까요?
암호
Zarah Snippet을 시작점으로 사용 :
/**
* @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;
}
이 작업을 수행하는 더 쉬운 방법이있을 수 있지만 이것은 생각할 수있는 모든보기에서 작동하며 재사용 할 수 있습니다. textView의 활성화 / onFocus 기능을 중단하지 않고 ListView에서 TextView에 애니메이션을 적용하려는 경우 특히 유용합니다. 또한 뷰에 초점이 맞춰져 있지 않아도 계속 스크롤됩니다.