Cuối cùng cũng có cách để làm việc, đúng cách để làm điều này là setFillAfter(true)
,
nếu bạn muốn xác định hình ảnh động của bạn trong xml thì bạn nên làm một số điều như thế này
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/decelerate_interpolator"
android:fillAfter="true">
<translate
android:fromXDelta="0%"
android:toXDelta="-100%"
android:duration="1000"/>
</set>
bạn có thể thấy rằng tôi đã xác định filterAfter="true"
trong set
thẻ, nếu bạn cố gắng xác định thẻ đó trong translate
, thẻ sẽ không hoạt động, có thể là lỗi lỗi trong khuôn khổ !!
và sau đó trong Bộ luật
Animation anim = AnimationUtils.loadAnimation(this, R.anim.slide_out);
someView.startAnimation(anim);
HOẶC
TranslateAnimation animation = new TranslateAnimation(-90, 150, 0, 0);
animation.setFillAfter(true);
animation.setDuration(1800);
someView.startAnimation(animation);
thì nó chắc chắn sẽ làm việc !!
Bây giờ điều này hơi phức tạp, có vẻ như chế độ xem thực sự di chuyển đến vị trí mới nhưng thực tế pixel của chế độ xem được di chuyển, tức là chế độ xem của bạn thực sự ở vị trí ban đầu nhưng không hiển thị, bạn có thể kiểm tra có bạn một số nút hoặc xem nhấp chuột được theo quan điểm của bạn (trong trường hợp của tôi trong cách bố trí), để khắc phục điều đó bạn phải tự di chuyển tầm nhìn của bạn/bố trí đến vị trí mới
public TranslateAnimation (float fromXDelta, float toXDelta, float fromYDelta, float toYDelta)
new TranslateAnimation(-90, 150, 0, 0);
bây giờ là chúng ta có thể thấy rằng hoạt hình của chúng tôi sẽ bắt đầu từ -90 x-trục đến 150 x-trục
vì vậy những gì chúng tôi làm là đặt
someView.setAnimationListener(this);
và trong
public void onAnimationEnd(Animation animation)
{
someView.layout(150, 0, someView.getWidth() + 150, someView.getHeight());
}
bây giờ hãy để tôi giải thích public void layout (int left, int top, int right, int botton)
nó di chuyển bố trí của bạn đến vị trí mới đối số đầu tiên xác định bên trái, mà chúng tôi là , vì dịch hoạt hình đã hoạt hình điểm của chúng tôi đến 150 trục x, trên cùng là 0 vì chúng tôi chưa có trục hình động, bây giờ ở bên phải chúng tôi đã thực hiện someView.getWidth() + 150
về cơ bản, chúng tôi nhận được chiều rộng của chế độ xem và đã thêm vì chúng tôi bên trái của chúng tôi hiện đang di chuyển sang 150 x-trục để làm cho chiều rộng của chế độ xem thành hình gốc, và đáy bằng với chiều cao của chế độ xem của chúng tôi.
Tôi hy vọng bạn người giờ đã hiểu các khái niệm về dịch, và vẫn còn bạn có bất kỳ câu hỏi mà bạn có thể yêu cầu ngay lập tức trong phần bình luận, tôi cảm thấy niềm vui để giúp :)
EDIT Không sử dụng phương pháp layout()
vì nó có thể được gọi bởi khung công tác khi chế độ xem không hợp lệ và các thay đổi của bạn sẽ không có hiệu lực, hãy sử dụng LayoutParams
để đặt thông số bố cục theo yêu cầu của bạn
ah ha! chính xác những gì tôi cần. cảm ơn! – LoneWolfPR
Nhưng tôi nên làm gì nếu cùng phải trượtIn. kể từ khi nó không thực sự di chuyển sau đó làm thế nào tôi có thể slideIn đối tượng mà tôi có slideOut ??? – Ads
Thậm chí nếu bạn làm bạn * permeneny * di chuyển 'View' của bạn trong' onAnimationEnd() 'nó ** flicker **. Kiểm tra: http://stackoverflow.com/questions/2650351/android-translateanimation-resets-after-animation –