TranslateAnimation
Görünümü belirli bir miktarda bir yönde "çekerek" çalışır. Bu "çekmeye" nereden başlayacağınızı ve nerede biteceğini belirleyebilirsiniz.
TranslateAnimation(fromXDelta, toXDelta, fromYDelta, toYDelta)
fromXDelta, X eksenindeki hareketin başlangıç konumunun ofsetini ayarlar.
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, hareketin X eksenindeki ofset bitiş konumunu tanımlar.
toXDelta = 0 //no offset.
toXDelta = 300 //the movement ends at 300px to the right.
toXDelta = -300 //the movement ends at 300px to the left.
Metninizin genişliği, XDelta ve toXDelta arasındaki farkın modülünden daha büyükse, metin ekranda tamamen hareket edemez ve tamamen hareket edemez.
Misal
Ekran boyutumuzun 320x240 piksel olduğunu varsayalım. 700 piksel genişliğinde bir metin içeren bir TextView'ımız var ve ifadenin sonunu görebilmemiz için metni "çeken" bir animasyon oluşturmak istiyoruz.
(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... ||
---------------------------+|
| |
| |
| |
+---------------------------+
Önce fromXDelta = 0
hareketin bir başlangıç ofseti olmayacak şekilde ayarladık . Şimdi toXDelta değerini bulmamız gerekiyor. İstenilen efekti elde etmek için metni ekrandan tam olarak yaydığı piksel ile "çekmemiz" gerekir. (şemada <<<< X px >>>> ile temsil edilir) Metnimiz 700 genişliğe sahip olduğundan ve görünür alan 320 piksel (ekran genişliği) olduğundan şunları ayarladık:
tXDelta = 700 - 320 = 380
Ve Ekran Genişliğini ve Metin Genişliğini nasıl anlarız?
Kod
Zarah Snippet'ini başlangıç noktası olarak almak:
public static Animation scrollingText(View view, float margin){
Context context = view.getContext();
view.measure(View.MeasureSpec.UNSPECIFIED,
View.MeasureSpec.UNSPECIFIED);
float width = view.getMeasuredWidth();
float screenWidth = ((Activity) context).getWindowManager().getDefaultDisplay().getWidth();
float toXDelta = width - (screenWidth - margin);
if (toXDelta < 0) {toXDelta = 0; } else { toXDelta = 0 - toXDelta;}
Animation mAnimation = new TranslateAnimation(0, toXDelta, 0, 0);
mAnimation.setDuration(15000);
mAnimation.setRepeatMode(Animation.RESTART);
mAnimation.setRepeatCount(Animation.INFINITE);
return mAnimation;
}
Bunu gerçekleştirmenin daha kolay yolları olabilir, ancak bu, aklınıza gelebilecek her görünüm için işe yarar ve yeniden kullanılabilir. TextView'in etkin / onFocus yeteneklerini bozmadan ListView'da bir TextView'ı canlandırmak istiyorsanız özellikle kullanışlıdır. Ayrıca, Görünüm odaklanmasa bile sürekli olarak kayar.