2010-11-18 24 views
20

Tôi muốn một hình ảnh di chuyển theo chiều ngang. tức là hình ảnh sẽ di chuyển từ góc dưới cùng bên trái sang góc dưới cùng bên phải một lần. Không cần quay lại góc trái phía dưới.dịch hoạt ảnh

Các đoạn mã mà tôi đã cố gắng là

<set xmlns:android="http://schemas.android.com/apk/res/android" 
android:interpolator="@android:anim/linear_interpolator"> 

<translate android:fromXDelta="0%p" android:toXDelta="200%p" 
android:duration = "2000"/> 
</set> 

này di chuyển hình ảnh từ trái đến đúng. Nhưng nó lại đến bên trái. Bất cứ ai có thể cho tôi biết cách giải quyết vấn đề này?

Trả lời

40

Tôi nhận được ... thay vì sử dụng tệp xml hoạt ảnh đó, tôi đã viết bên trong tệp java.

Animation animation = new TranslateAnimation(0, 500,0, 0); 
animation.setDuration(1000); 
animation.setFillAfter(true); 
myImage.startAnimation(animation); 
myImage.setVisibility(0); 

Bây giờ hình ảnh di chuyển từ trái sang phải và sau đó sẽ ẩn đi ... do đó hoạt ảnh! :)

+1

Tôi không biết tại sao mã đó hoạt động. Không có nhiều ý nghĩa. Hãy thử sử dụng 'View.VISIBLE' trong phương thức' setVisibility() '. – Macarse

+0

setVisibility (0) đôi khi nó không hoạt động ... tôi không biết y ... Tôi đã giữ View.INVISIBLE bây giờ, hoạt động ........ – Mathew

+6

thực sự, INVISIBLE là int == 1, VISIBLE == 0, đã đi == 2, [tại đây] (http://developer.android.com/reference/android/view/View.html#attr_android:visibility) ** Tôi cũng gặp sự cố với setVisibility trong mã, vì vậy tôi đặt View.VISIBLE/View.INVISIBLE in .setVisibility ** – xxxxxxxxxadfas

69

Bạn đã trở thành nạn nhân đến sự hiểu lầm mọi người vĩ đại đầu tiên làm về hình ảnh động Android: phim hoạt hình ImageView (hoặc bất kỳ loại xem) là không thực sự di chuyển (hoặc mở rộng quy mô hoặc xoay hoặc fading). Đó là tất cả một mẹo ... một hoạt hình về cơ bản là một số hướng dẫn cuối cùng cho công cụ tạo thành màn hình để bù đắp lượt xem theo x/y, xoay theo z, v.v. Vị trí/kích thước/góc/alpha cơ bản của chế độ xem không bao giờ thực sự thay đổi.

Do đó khi hoạt ảnh kết thúc, hình ảnh của bạn xuất hiện để quay lại điểm xuất phát, vì nó không bao giờ thực sự để lại nó.

Điều đó nói rằng, bạn có thể đạt được những gì bạn muốn một cách đơn giản bằng cách thêm android:fillAfter="true" vào thẻ <translate> của bạn. Chỉ cần nhớ rằng hình ảnh không được chuyển thực sự. Nếu bạn cần cập nhật bố cục của mình ở cuối hoạt ảnh, hãy móc lên một AnimationListener và thực hiện trong onAnimationEnd().

+1

Xin chào Reuben, tôi đã thử với android: fillAfter = "true" ... nhưng nó giống như trước đây ... sau đó tôi đã thử với onAnimationEnd(). Tôi cho thấy tầm nhìn của hình ảnh là vô hình ... nhưng vẫn còn điều tương tự đang xảy ra ... bất kỳ đầu mối về những gì tôi đã làm sai? – Mathew

+1

Có lẽ vì bạn đang sử dụng nhưng giờ đây nó không quan trọng. –

+8

Tại sao nó không quan trọng? Một số mã sẽ làm cho câu trả lời này trở thành một câu trả lời đáng yêu –

15

Dịch hoạt ảnh có thể thay đổi giao diện trực quan của một đối tượng, nhưng chúng không thể tự thay đổi đối tượng. Tức là, nếu bạn áp dụng một hoạt ảnh dịch vào một khung nhìn, nó sẽ chuyển sang một vị trí mới, nhưng các sự kiện nhấp chuột của nó sẽ không bị sa thải; các sự kiện nhấp chuột vẫn sẽ bị kích hoạt ở vị trí trước đó của nó.

Điều này xảy ra vì chế độ xem vẫn ở vị trí ban đầu. Để khắc phục điều này, chúng ta có thể sử dụng ObjectAnimation mà thực sự di chuyển một đối tượng. Hoạt ảnh đối tượng là hoạt ảnh duy nhất thực sự di chuyển đối tượng.

Bạn có thể tạo hoạt ảnh Dịch bằng cách sử dụng ObjectAnimator.

ObjectAnimator transAnimation= ObjectAnimator.ofFloat(view, propertyName, fromX, toX); 
transAnimation.setDuration(3000);//set duration 
transAnimation.start();//start animation 

xem - đây là chế độ xem hoạt ảnh nào sẽ được áp dụng propertyName-Thuộc tính đang hoạt ảnh. FromX, toX-A tập hợp các giá trị mà hoạt ảnh sẽ hoạt ảnh giữa theo thời gian.

+2

sử dụng liên kết của bạn trong câu trả lời này để thúc đẩy lưu lượng truy cập bị cau mày! Có thể là tốt hơn để bao gồm một báo giá tóm tắt từ liên kết đó ở đây để ngăn chặn thối liên kết! – t0mm13b

+0

ObjectAnimator được giới thiệu từ Android 11. Vì vậy, trên phiên bản Android trước, bạn phải sử dụng thư viện không chính thức. Đây là một thư viện NineOldAndroids mà bạn có thể tìm thấy tất cả các API hoạt hình của android 11 và sử dụng với tất cả các phiên bản Android khác: http://nineoldandroids.com/ –

Các vấn đề liên quan