2010-10-25 22 views
5

Tôi đã chụp một số hình động xml trực tiếp từ tài liệu android và như đến mức tôi có thể thấy, không hoạt động trên trình mô phỏng 2.1 cập nhật 1 hoặc cập nhật 2.1 của tôi 1 thiết bị Galaxy S.Khởi động hoạt hình của AndroidBắt đầu bị hỏng hoặc lỗi?

Cụ thể, tôi đang cố gắng để tạo ra một hình ảnh động co giãn theo nhịp một cái nhìn (tức là làm cho nó nhỏ hơn thì lớn hơn trong một hình ảnh động) Đây là đánh dấu rất đơn giản:

<?xml version="1.0" encoding="utf-8"?> 
<set 
     xmlns:android="http://schemas.android.com/apk/res/android"> 
     <scale 
       android:fromXScale="1.0" 
       android:toXScale="0.5" 
       android:fromYScale="1.0" 
       android:toYScale="0.5" 
       android:pivotX="50%" 
       android:pivotY="50%" 
       android:duration="1000" /> 
       <set android:startOffset="1000"> 
         <scale 
         android:fromXScale="0.5" 
         android:toXScale="1.0" 
         android:fromYScale="0.5" 
         android:toYScale="1.0" 
         android:pivotX="50%" 
         android:pivotY="50%" 
         android:duration="1000" /> 
       </set> 
</set> 

Vì vậy, những gì tôi cố gắng đạt được là giảm tầm nhìn từ kích thước của nó xuống còn một nửa trong một giây, sau đó tăng nó trở lại kích thước ban đầu trong một giây. Vì vậy, để tái lặp lại, hơn hai giây nó phải đi từ bản gốc -> một nửa kích thước -> ban đầu.

Điều thực sự xảy ra là nó chụp ngay một nửa kích thước lượt xem (mặc dù từX/YScale là 1,0) và sau đó thực hiện hoạt ảnh sau hai giây và quay lại kích thước ban đầu sau đó.

Có ai khác có thể thử điều này nhanh chóng không? Nếu những người khác thấy hành vi này Tôi sẽ gửi nó dưới dạng lỗi. Tôi chỉ không thể tin một cái gì đó cơ bản như vậy có thể bị hỏng !?

Ngoài ra, sao chép hoạt ảnh này trong tiêu đề "Hoạt hình Tween" trên trang này http://developer.android.com/guide/topics/graphics/2d-graphics.html từ cho từ cũng không hoạt hình như trên trang nói. Có vẻ như bị phá vỡ theo cùng một cách!

Bất kỳ ai có ý tưởng nào?

Cảm ơn!

Andy.

Trả lời

3

Tôi đã xóa thẻ <set> thứ hai, vì vậy chỉ có một <set> với hai số <scale> trẻ em. Điều này có một chu kỳ làm việc ok nhưng nó không lặp lại. Có lẽ bạn phải lắng nghe kết thúc hoạt hình và tự khởi động lại nó (vì vậy, số bù bắt đầu từ 0 mỗi lần).

Trên mặt tươi sáng tôi đã có thể sử dụng repeatMode để đạt được hiệu quả bạn dường như muốn, chỉ cần sử dụng một thẻ:

<scale xmlns:android="http://schemas.android.com/apk/res/android" 
     android:repeatMode="reverse" 
     android:fromXScale="1.0" 
     android:toXScale="0.5" 
     android:fromYScale="1.0" 
     android:toYScale="0.5" 
     android:pivotX="50%" 
     android:pivotY="50%" 
     android:duration="1000" /> 
+0

Gần đó!Tôi cần thêm android: repeatCount = "1" để nó hoạt động, nếu không nó sẽ mở rộng quy mô hoạt ảnh và quay lại (thay vì hoạt ảnh trở lại). Dù bằng cách nào nó hoạt động với bổ sung này! Cảm ơn nhiều! :) Trên một mặt lưu ý, tôi thực sự đã thử cách tiếp cận này, tất cả trong mã, nhưng nó không lặp lại, chỉ luôn luôn bị gãy mặc dù số lần lặp lại! Tài liệu Android không thành công nữa! ;) – Andy

+0

Xin lỗi, tôi đã quên chi tiết nhỏ (mà tôi đã thực hiện trong mã, chứ không phải XML). –

5

Cái gì mà tôi vừa mới khám phá và là một phần trách nhiệm đối với hành vi không mong muốn hoạt ảnh của bạn là thực tế là nhiều thuộc tính XML được sử dụng trong thẻ <set> không hoạt động!

Trong ví dụ mã của bạn bạn có <set android:startOffset="1000">

Do một lỗi vô lý/khiếm khuyết, Android sẽ bỏ qua thuộc tính này mà sẽ gây ra đứa con thứ hai của bạn <set> của hình ảnh động để bắt đầu đồng thời với cha mẹ của bạn <set>

Điều gì làm điều này thậm chí còn bực bội hơn nữa là thuộc tính này hoạt động theo chương trình trong mã, setStartOffset() nhưng không phải trong XML.

tôi đã dành một vài giờ bực bội tìm ra mà thuộc tính công việc trong mã và XML cho AnimationSet s và đệ trình một báo cáo lỗi/vấn đề ở đây: Issue 17662

Nói tóm lại:

setRepeatCount()/android : repeatCount

Thuộc tính này (cũng như repeatMode) không hoạt động trong mã hoặc XML. Điều này làm cho việc lặp lại toàn bộ các hoạt ảnh khó khăn.

setDuration()/android: thời gian

Thiết này trên một AnimationSet trong mã TRÌNH (ghi đè tất cả khoảng thời gian của trẻ em hình ảnh động), nhưng không phải khi đưa vào thẻ trong XML

setFillAfter()/android: fillAfter

Điều này hoạt động trong cả mã và XML cho thẻ. Thật kỳ lạ tôi đã nhận nó để cũng làm việc mà không cần phải thiết lập fillEnabled thành sự thật.

setFillBefore()/android: fillBefore

Dường như không có hiệu lực/bỏ qua trong cả mã và XML

setFillEnabled()/android: fillEnabled

Dường như không có hiệu lực/bỏ qua trong cả mã và XML. Tôi vẫn có thể nhận được fillSau khi làm việc ngay cả khi không bao gồm fillEnabled hoặc thiết lập fillEnabled thành false.

setStartOffset()/android: startOffset

này chỉ hoạt động trong mã và không XML.

Không cần phải nói điều này gây ra nhiều thất vọng không cần thiết.

2

Hãy thử các mã sau. Những gì còn thiếu là repeatMode = "-1" trong câu trả lời trước. Sau đó, bạn sẽ thấy hình ảnh rung động vô thời hạn mà không cần sử dụng trình nghe.

Trong res/anim/pulsate.xml:

<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android" > 
<scale 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:duration="1000" 
    android:fromXScale="0.5" 
    android:fromYScale="0.5" 
    android:pivotX="50%" 
    android:pivotY="50%" 
    android:repeatMode="reverse" 
    android:repeatCount="-1" 
    android:toXScale="1.0" 
    android:toYScale="1.0" /> 

Trong file java:

Animation animPulsate = AnimationUtils.loadAnimation(JoinRecipeClubActivity.this, R.anim.pulsate); 
ImageView ivFinger = (ImageView) findViewById(R.id.wivFinger); 
ivFinger.startAnimation(animPulsate); 
Các vấn đề liên quan