Ảnh động dạng khung hiển thị

Bạn có thể sử dụng hệ thống ảnh động dạng khung hiển thị để thực hiện ảnh động lấy giá trị giữa hai lớp trên Khung hiển thị. Ảnh động lấy giá trị giữa tính toán ảnh động với các thông tin như điểm bắt đầu, điểm kết thúc, kích thước, độ xoay và các khía cạnh thường gặp khác của một ảnh động.

Một ảnh động dạng tween có thể thực hiện một loạt các phép biến đổi đơn giản (vị trí, kích thước, chế độ xoay, và độ trong suốt) vào nội dung của đối tượng Thành phần hiển thị. Vì vậy, nếu có đối tượng TextView, bạn có thể di chuyển, xoay, tăng hoặc thu nhỏ văn bản. Nếu có hình nền, hình nền sẽ được biến đổi cùng với văn bản. animation package cung cấp tất cả các lớp được dùng trong ảnh động lấy giá trị giữa.

Một trình tự các lệnh của ảnh động xác định ảnh động lấy giá trị giữa, được xác định bằng XML hoặc Mã Android. Giống như việc xác định bố cục, bạn nên dùng tệp XML vì tệp này dễ đọc hơn, có thể sử dụng lại và hoán đổi được so với mã hoá cứng ảnh động. Trong ví dụ bên dưới, chúng tôi sử dụng XML. (Đến tìm hiểu thêm về cách xác định ảnh động trong mã xử lý ứng dụng của bạn, thay vì XML, hãy tham khảo lớp AnimationSet và các lớp con Animation khác.)

Hướng dẫn về ảnh động xác định các phép biến đổi mà bạn muốn xảy ra, thời điểm chúng sẽ xảy ra và khoảng thời gian áp dụng đề xuất. Các quy tắc chuyển đổi có thể diễn ra tuần tự hoặc đồng thời – ví dụ: bạn có thể di chuyển nội dung của TextView từ trái sang phải, sau đó xoay 180 độ hoặc bạn có thể di chuyển và xoay văn bản cùng một lúc. Mỗi phép biến đổi sẽ nhận một tập hợp các thông số cụ thể cho phép biến đổi đó (kích thước bắt đầu và kích thước kết thúc cho kích thước thay đổi, góc bắt đầu và góc kết thúc để xoay, v.v.), cũng như một tập hợp các tham số các thông số (ví dụ: thời gian bắt đầu và thời lượng). Để thực hiện một số phép biến đổi đồng thời cho chúng cùng một thời gian bắt đầu; để quảng cáo theo tuần tự, hãy tính thời gian bắt đầu cộng với thời lượng của lần biến đổi trước đó.

Tệp XML ảnh động thuộc thư mục res/anim/ của Android dự án. Tệp phải có một phần tử gốc duy nhất: đây sẽ là một phần tử gốc <alpha>, <scale>, <translate> <rotate>, phần tử bộ nội suy hoặc phần tử <set> chứa nhóm các phần tử này (có thể bao gồm một <set> khác). Theo mặc định, tất cả các hướng dẫn ảnh động được áp dụng đồng thời. Để chúng xảy ra tuần tự, bạn phải chỉ định thuộc tính startOffset, như trong ví dụ dưới đây.

XML sau đây từ một trong Apidemos được sử dụng để kéo dài, sau đó đồng thời xoay và xoay một đối tượng Thành phần hiển thị.

<set android:shareInterpolator="false">
    <scale
        android:interpolator="@android:anim/accelerate_decelerate_interpolator"
        android:fromXScale="1.0"
        android:toXScale="1.4"
        android:fromYScale="1.0"
        android:toYScale="0.6"
        android:pivotX="50%"
        android:pivotY="50%"
        android:fillAfter="false"
        android:duration="700" />
    <set android:interpolator="@android:anim/decelerate_interpolator">
        <scale
           android:fromXScale="1.4"
           android:toXScale="0.0"
           android:fromYScale="0.6"
           android:toYScale="0.0"
           android:pivotX="50%"
           android:pivotY="50%"
           android:startOffset="700"
           android:duration="400"
           android:fillBefore="false" />
        <rotate
           android:fromDegrees="0"
           android:toDegrees="-45"
           android:toYScale="0.0"
           android:pivotX="50%"
           android:pivotY="50%"
           android:startOffset="700"
           android:duration="400" />
    </set>
</set>

Toạ độ màn hình (không được sử dụng trong ví dụ này) là (0,0) ở góc trên bên trái và sẽ tăng lên khi bạn đi xuống và sang phải.

Một số giá trị, chẳng hạn như intentX, có thể được chỉ định tương đối so với chính đối tượng đó hoặc so với cha mẹ. Hãy nhớ sử dụng định dạng phù hợp cho nội dung bạn muốn ("50" tương ứng với 50% so với thành phần mẹ, hoặc "50%" 50% so với chính nó).

Bạn có thể xác định cách áp dụng phép biến đổi theo thời gian bằng cách chỉ định Interpolator. Android bao gồm một số lớp con Bộ nội suy chỉ định các đường cong tốc độ, ví dụ: AccelerateInterpolator yêu cầu một hành động biến đổi bắt đầu chậm lại và tăng tốc. Mỗi phần đều có một giá trị thuộc tính có thể được áp dụng trong XML.

Với tệp XML này được lưu dưới dạng hyperspace_jump.xml trong res/anim/ Thư mục của dự án, mã sau đây sẽ tham chiếu thư mục này và áp dụng cho đối tượng ImageView qua bố cục.

Kotlin

AnimationUtils.loadAnimation(this, R.anim.hyperspace_jump).also { hyperspaceJumpAnimation ->
    findViewById<ImageView>(R.id.spaceshipImage).startAnimation(hyperspaceJumpAnimation)
}

Java

ImageView spaceshipImage = (ImageView) findViewById(R.id.spaceshipImage);
Animation hyperspaceJumpAnimation = AnimationUtils.loadAnimation(this, R.anim.hyperspace_jump);
spaceshipImage.startAnimation(hyperspaceJumpAnimation);

Thay vì startAnimation(), bạn có thể xác định thời gian bắt đầu cho ảnh động bằng Animation.setStartTime(), sau đó gán ảnh động cho Chế độ xem bằng View.setAnimation().

Để biết thêm thông tin về cú pháp XML, các thẻ và thuộc tính có sẵn, hãy xem Tài nguyên ảnh động.

Lưu ý: Bất kể ảnh động có thể di chuyển hoặc đổi kích thước như thế nào, giới hạn của Khung hiển thị chứa ảnh động sẽ không tự động điều chỉnh cho phù hợp. Mặc dù vậy, ảnh động vẫn sẽ được vẽ ngoài giới hạn của Khung hiển thị và sẽ không bị cắt bớt. Tuy nhiên, việc cắt sẽ xảy ra nếu ảnh động vượt quá giới hạn của Khung hiển thị mẹ.