Tài nguyên ảnh động

Tài nguyên ảnh động có thể xác định một trong hai loại ảnh động:

Ảnh động thuộc tính
Tạo ảnh động bằng cách sửa đổi giá trị thuộc tính của một đối tượng trong một khoảng thời gian nhất định bằng Animator.
Chế độ xem ảnh động

Bạn có thể thực hiện hai loại ảnh động với chế độ xem khung ảnh động:

Ảnh động thuộc tính

Một ảnh động được xác định trong tệp XML có chức năng sửa đổi các thuộc tính của đối tượng mục tiêu, chẳng hạn như màu nền hoặc giá trị alpha trong một khoảng thời gian nhất định.

vị trí tệp:
res/animator/filename.xml
Tên tệp sẽ được dùng làm mã nhận dạng tài nguyên.
loại dữ liệu tài nguyên được biên dịch:
Con trỏ tài nguyên đến ValueAnimator, ObjectAnimator hoặc AnimatorSet.
mã tham chiếu tài nguyên:
Trong mã dựa trên Java hoặc Kotlin: R.animator.filename
Trong XML: @[package:]animator/filename
cú pháp:
<set
  android:ordering=["together" | "sequentially"]>

    <objectAnimator
        android:propertyName="string"
        android:duration="int"
        android:valueFrom="float | int | color"
        android:valueTo="float | int | color"
        android:startOffset="int"
        android:repeatCount="int"
        android:repeatMode=["restart" | "reverse"]
        android:valueType=["intType" | "floatType"]/>

    <animator
        android:duration="int"
        android:valueFrom="float | int | color"
        android:valueTo="float | int | color"
        android:startOffset="int"
        android:repeatCount="int"
        android:repeatMode=["restart" | "reverse"]
        android:valueType=["intType" | "floatType"]/>

    <set>
        ...
    </set>
</set>

Tệp phải có một phần tử gốc: <set>, <objectAnimator> hoặc <valueAnimator>. Bạn có thể nhóm các phần tử ảnh động lại với nhau trong phần tử <set>, bao gồm cả các phần tử <set> khác.

phần tử:
<set>
Một vùng chứa lưu giữ các phần tử ảnh động khác (<objectAnimator>, <valueAnimator> hoặc các phần tử <set> khác). Đại diện cho một AnimatorSet.

Bạn có thể chỉ định các thẻ <set> lồng nhau để nhóm thêm các ảnh động lại với nhau. Mỗi <set> có thể xác định thuộc tính ordering cho riêng nó.

thuộc tính:

android:ordering
Từ khoá. Chỉ định thứ tự phát các ảnh động trong tập hợp này.
Giá trịMô tả
sequentiallyPhát các ảnh động trong tập hợp này theo tuần tự
together (mặc định)Phát các ảnh động trong tập hợp này cùng lúc.
<objectAnimator>
Tạo ảnh động cho một thuộc tính cụ thể của đối tượng trong một khoảng thời gian cụ thể. Đại diện cho một ObjectAnimator.

thuộc tính:

android:propertyName
Chuỗi. Bắt buộc. Thuộc tính của đối tượng để tạo ảnh động được tham chiếu theo tên của đối tượng. Chẳng hạn như bạn có thể chỉ định "alpha" hoặc "backgroundColor" cho một đối tượng Chế độ xem. Tuy nhiên, phần tử objectAnimator không hiển thị thuộc tính target nên bạn không thể đặt đối tượng để tạo ảnh động trong phần khai báo tệp XML. Bạn phải tăng cường tài nguyên XML ảnh động bằng cách gọi loadAnimator()setTarget() để đặt đối tượng mục tiêu chứa thuộc tính này.
android:valueTo
số thực có độ chính xác đơn, số nguyên hoặc màu. Bắt buộc. Giá trị mà thuộc tính ảnh động kết thúc. Màu được biểu thị dưới dạng số thập lục phân gồm 6 chữ số (ví dụ: #333333).
android:valueFrom
số thực có độ chính xác đơn, số nguyên hoặc màu. Giá trị bắt đầu của thuộc tính ảnh động. Nếu không được chỉ định, ảnh động sẽ bắt đầu ở giá trị mà phương thức get của thuộc tính thu được. Màu được biểu thị dưới dạng số thập lục phân gồm 6 chữ số (ví dụ: #333333).
android:duration
số nguyên. Thời gian tính bằng mili giây của ảnh động. Thời gian mặc định là 300 mili giây.
android:startOffset
số nguyên. Thời lượng mili giây mà ảnh động trì hoãn sau khi start() được gọi.
android:repeatCount
số nguyên. Số lần lặp lại một ảnh động. Đặt thành "-1" để lặp lại vô hạn hoặc thành số nguyên dương. Chẳng hạn như giá trị của "1" có nghĩa là ảnh động sẽ lặp lại một lần sau lần chạy ảnh động đầu tiên, vì vậy ảnh động sẽ phát tổng cộng hai lần. Giá trị mặc định là "0", nghĩa là không lặp lại.
android:repeatMode
số nguyên. Cách chạy của ảnh động khi đến cuối ảnh động. android:repeatCount phải được đặt thành số nguyên dương hoặc "-1" để thuộc tính này có hiệu lực. Được đặt thành "reverse" để có hướng đảo ngược ảnh động qua mỗi lần lặp hoặc "restart" để có vòng lặp ảnh động từ đầu mỗi lần.
android:valueType
Từ khoá. Không chỉ định thuộc tính này nếu giá trị là một màu sắc. Khung ảnh động tự động xử lý các giá trị màu
Giá trịMô tả
intTypeChỉ định các giá trị động là số nguyên
floatType (mặc định)Chỉ định các giá trị động là các số thực có độ chính xác đơn
<animator>
Thực hiện ảnh động trong một khoảng thời gian nhất định. Đại diện cho ValueAnimator.

thuộc tính:

android:valueTo
số thực có độ chính xác đơn, số nguyên hoặc màu. Bắt buộc. Giá trị nơi ảnh động kết thúc. Màu được biểu thị dưới dạng số thập lục phân gồm 6 chữ số (ví dụ: #333333).
android:valueFrom
số thực có độ chính xác đơn, số nguyên hoặc màu. Bắt buộc. Giá trị nơi ảnh động bắt đầu. Màu được biểu thị dưới dạng số thập lục phân gồm 6 chữ số (ví dụ: #333333).
android:duration
số nguyên. Thời gian tính bằng mili giây của ảnh động. Thời gian mặc định là 300 mili giây.
android:startOffset
số nguyên. Thời lượng mili giây mà ảnh động trì hoãn sau khi start() được gọi.
android:repeatCount
số nguyên. Số lần lặp lại một ảnh động. Đặt thành "-1" để lặp lại vô hạn hoặc thành số nguyên dương. Chẳng hạn như giá trị của "1" có nghĩa là ảnh động sẽ lặp lại một lần sau lần chạy ảnh động đầu tiên, vì vậy ảnh động sẽ phát tổng cộng hai lần. Giá trị mặc định là "0", nghĩa là không lặp lại.
android:repeatMode
số nguyên. Cách chạy của ảnh động khi đến cuối ảnh động. android:repeatCount phải được đặt thành số nguyên dương hoặc "-1" để thuộc tính này có hiệu lực. Được đặt thành "reverse" để có hướng đảo ngược ảnh động qua mỗi lần lặp hoặc "restart" để có vòng lặp ảnh động từ đầu mỗi lần.
android:valueType
Từ khoá. Không chỉ định thuộc tính này nếu giá trị là một màu sắc. Khung ảnh động sẽ tự động xử lý các giá trị màu sắc.
Giá trịMô tả
intTypeChỉ định các giá trị động là số nguyên
floatType (mặc định)Chỉ định các giá trị động là các số thực có độ chính xác đơn
ví dụ:
Tệp XML được lưu vào res/animator/property_animator.xml:

<set android:ordering="sequentially">
    <set>
        <objectAnimator
            android:propertyName="x"
            android:duration="500"
            android:valueTo="400"
            android:valueType="intType"/>
        <objectAnimator
            android:propertyName="y"
            android:duration="500"
            android:valueTo="300"
            android:valueType="intType"/>
    </set>
    <objectAnimator
        android:propertyName="alpha"
        android:duration="500"
        android:valueTo="1f"/>
</set>

Để chạy ảnh động này, bạn phải tăng cường tài nguyên XML trong mã thành đối tượng AnimatorSet, sau đó đặt đối tượng mục tiêu cho tất cả các ảnh động trước khi bắt đầu bộ ảnh động. Việc gọi setTarget() sẽ đặt một đối tượng mục tiêu duy nhất cho tất cả thành phần con của AnimatorSet để thuận tiện. Mã sau đây minh hoạ cách thực hiện việc này:

Kotlin

val set: AnimatorSet = AnimatorInflater.loadAnimator(myContext, R.animator.property_animator)
    .apply {
        setTarget(myObject)
        start()
    }

Java

AnimatorSet set = (AnimatorSet) AnimatorInflater.loadAnimator(myContext,
    R.animator.property_animator);
set.setTarget(myObject);
set.start();
xem thêm:

Chế độ xem ảnh động

Chế độ xem khung ảnh động hỗ trợ cả ở dạng tween lẫn dạng từng khung ảnh động, cả hai đạng này đều có thể được khai báo trong tệp XML. Các phần sau đây mô tả cách sử dụng cả hai phương pháp.

Ảnh động dạng Tween

Một ảnh động được xác định trong XML thực hiện các thao tác chuyển đổi như xoay, làm mờ, di chuyển và kéo giãn trên hình ảnh.

vị trí tệp:
res/anim/filename.xml
Tên tệp sẽ được dùng làm mã nhận dạng tài nguyên.
loại dữ liệu tài nguyên được biên dịch:
Con trỏ tài nguyên đến Animation.
mã tham chiếu tài nguyên:
Trong Java: R.anim.filename
Trong XML: @[package:]anim/filename
cú pháp:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@[package:]anim/interpolator_resource"
    android:shareInterpolator=["true" | "false"] >
    <alpha
        android:fromAlpha="float"
        android:toAlpha="float" />
    <scale
        android:fromXScale="float"
        android:toXScale="float"
        android:fromYScale="float"
        android:toYScale="float"
        android:pivotX="float"
        android:pivotY="float" />
    <translate
        android:fromXDelta="float"
        android:toXDelta="float"
        android:fromYDelta="float"
        android:toYDelta="float" />
    <rotate
        android:fromDegrees="float"
        android:toDegrees="float"
        android:pivotX="float"
        android:pivotY="float" />
    <set>
        ...
    </set>
</set>

Tệp phải có một phần tử gốc: <alpha>, <scale>, <translate>, <rotate> hoặc <set>, lưu giữ một nhóm (hoặc nhóm) các phần tử ảnh động khác (thậm chí là các phần tử <set> lồng nhau).

phần tử:
<set>
Một vùng chứa lưu giữ các phần tử ảnh động khác (<alpha>, <scale>, <translate>, <rotate>) hoặc các phần tử <set> khác. Đại diện cho AnimationSet.

thuộc tính:

android:interpolator
Tài nguyên bộ nội suy. Interpolator để áp dụng cho ảnh động. Giá trị phải là mã tham chiếu đến một tài nguyên chỉ định bộ nội suy (không phải tên lớp của bộ nội suy). Tài nguyên của bộ nội suy mặc định có sẵn trong nền tảng hoặc bạn có thể tạo tài nguyên bộ nội suy của riêng mình. Hãy xem mục thảo luận bên dưới để biết thêm thông tin về Bộ nội suy.
android:shareInterpolator
Boolean. "đúng" nếu bạn muốn chia sẻ cùng một bộ nội suy giữa tất cả các phần tử con.
<alpha>
Ảnh động với hiệu ứng rõ dần hoặc mờ dần. Đại diện cho AlphaAnimation.

thuộc tính:

android:fromAlpha
Số thực có độ chính xác đơn. Bắt đầu độ lệch mờ, trong đó 0.0 là độ trong suốt và 1.0 là độ mờ.
android:toAlpha
Số thực có độ chính xác đơn. Kết thúc độ lệch mờ, trong đó 0.0 là trong suốt và 1.0 là độ mờ.

Để biết thêm các thuộc tính mà <alpha> hỗ trợ, vui lòng xem tài liệu tham khảo lớp Animation (trong đó tất cả các thuộc tính XML đều được phần tử này kế thừa).

<scale>
Ảnh động thay đổi kích thước. Bạn có thể chỉ định điểm giữa của hình ảnh mà từ đó hình ảnh phát triển ra ngoài (hoặc hướng vào trong) bằng cách chỉ định pivotXpivotY. Ví dụ: nếu các giá trị này là 0, 0 (góc trên cùng bên trái), thì tất cả các mức tăng trưởng sẽ giảm xuống sang phải. Đại diện cho ScaleAnimation.

thuộc tính:

android:fromXScale
Số thực có độ chính xác đơn. Bắt đầu độ lệch kích thước X, trong đó 1.0 không thay đổi.
android:toXScale
Số thực có độ chính xác đơn. Kết thúc độ lệch kích thước X, trong đó 1.0 không thay đổi.
android:fromYScale
Số thực có độ chính xác đơn. Bắt đầu độ lệch kích thước Y, trong đó 1.0 không thay đổi.
android:toYScale
Số thực có độ chính xác đơn. Kết thúc độ lệch kích thước Y, trong đó 1.0 không thay đổi.
android:pivotX
Số thực có độ chính xác đơn. Toạ độ X để duy trì trạng thái cố định khi đối tượng được điều chỉnh theo tỷ lệ.
android:pivotY
Số thực có độ chính xác đơn. Toạ độ Y để duy trì trạng thái cố định khi đối tượng được điều chỉnh theo tỷ lệ.

Để biết thêm các thuộc tính mà <scale> hỗ trợ, vui lòng xem tài liệu tham khảo lớp Animation (trong đó tất cả các thuộc tính XML đều được phần tử này kế thừa).

<translate>
Chuyển động theo chiều dọc và/hoặc ngang. Hỗ trợ các thuộc tính bên dưới ở ba định dạng bất kỳ sau: các giá trị từ -100 đến 100 kết thúc bằng "%", cho biết một tỷ lệ phần trăm so với chính nó; giá trị từ -100 đến 100 kết thúc bằng "%p", cho biết tỷ lệ phần trăm so với thành phần mẹ; một giá trị số thực có độ chính xác đơn, cho biết giá trị tuyệt đối. Đại diện cho TranslateAnimation.

thuộc tính:

android:fromXDelta
Số thực có độ chính xác đơn hoặc tỷ lệ phần trăm. Bắt đầu độ lệch X. Được thể hiện: tính theo pixel so với vị trí thông thường (chẳng hạn như "5"), tính theo tỷ lệ phần trăm so với chiều rộng của phần tử (chẳng hạn như "5%") hoặc tính theo tỷ lệ phần trăm so với chiều rộng mẹ (chẳng hạn như "5%p").
android:toXDelta
Số thực có độ chính xác đơn hoặc tỷ lệ phần trăm. Kết thúc độ lệch X. Được thể hiện: tính theo pixel so với vị trí thông thường (chẳng hạn như "5"), tính theo tỷ lệ phần trăm so với chiều rộng của phần tử (chẳng hạn như "5%") hoặc tính theo tỷ lệ phần trăm so với chiều rộng mẹ (chẳng hạn như "5%p").
android:fromYDelta
Số thực có độ chính xác đơn hoặc tỷ lệ phần trăm. Bắt đầu độ lệch Y. Được thể hiện: tính theo pixel so với vị trí thông thường (chẳng hạn như "5"), tính theo tỷ lệ phần trăm so với chiều cao của phần tử (chẳng hạn như "5%") hoặc tính theo tỷ lệ phần trăm so với chiều cao mẹ (chẳng hạn như "5%p").
android:toYDelta
Số thực có độ chính xác đơn hoặc tỷ lệ phần trăm. Kết thúc độ lệch Y. Được thể hiện: tính theo pixel so với vị trí thông thường (chẳng hạn như "5"), tính theo tỷ lệ phần trăm so với chiều cao của phần tử (chẳng hạn như "5%") hoặc tính theo tỷ lệ phần trăm so với chiều cao mẹ (chẳng hạn như "5%p").

Để biết thêm các thuộc tính mà <translate> hỗ trợ, vui lòng xem tài liệu tham khảo lớp Animation (trong đó tất cả các thuộc tính XML đều được phần tử này kế thừa).

<rotate>
Ảnh động xoay. Đại diện cho RotateAnimation.

thuộc tính:

android:fromDegrees
Số thực có độ chính xác đơn. Vị trí góc bắt đầu, tính bằng độ.
android:toDegrees
Số thực có độ chính xác đơn. Vị trí góc kết thúc, tính bằng độ.
android:pivotX
Số thực có độ chính xác đơn hoặc tỷ lệ phần trăm. Toạ độ X của tâm xoay. Được thể hiện: tính theo pixel so với cạnh trái của đối tượng (chẳng hạn như "5"), tính theo tỷ lệ phần trăm so với cạnh trái của đối tượng (chẳng hạn như "5%") hoặc tính theo tỷ lệ phần trăm so với cạnh trái của vùng chứa mẹ (chẳng hạn như "5%p").
android:pivotY
Số thực có độ chính xác đơn hoặc tỷ lệ phần trăm. Toạ độ Y của tâm xoay. Được thể hiện: tính theo pixel so với cạnh trên của đối tượng (chẳng hạn như "5"), tính theo tỷ lệ phần trăm so với cạnh trên của đối tượng (chẳng hạn như "5%") hoặc tính theo tỷ lệ phần trăm so với cạnh trên của vùng chứa mẹ (chẳng hạn như "5%p").

Để biết thêm các thuộc tính mà <rotate> hỗ trợ, vui lòng xem tài liệu tham khảo lớp Animation (trong đó tất cả các thuộc tính XML đều được phần tử này kế thừa).

ví dụ:
Tệp XML được lưu vào res/anim/hyperspace_jump.xml:

<set xmlns:android="http://schemas.android.com/apk/res/android"
    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/accelerate_interpolator"
        android:startOffset="700">
        <scale
            android:fromXScale="1.4"
            android:toXScale="0.0"
            android:fromYScale="0.6"
            android:toYScale="0.0"
            android:pivotX="50%"
            android:pivotY="50%"
            android:duration="400" />
        <rotate
            android:fromDegrees="0"
            android:toDegrees="-45"
            android:toYScale="0.0"
            android:pivotX="50%"
            android:pivotY="50%"
            android:duration="400" />
    </set>
</set>

Mã xử lý ứng dụng này sẽ áp dụng ảnh động cho ImageView và bắt đầu ảnh động:

Kotlin

val image: ImageView = findViewById(R.id.image)
val hyperspaceJump: Animation = AnimationUtils.loadAnimation(this, R.anim.hyperspace_jump)
image.startAnimation(hyperspaceJump)

Java

ImageView image = (ImageView) findViewById(R.id.image);
Animation hyperspaceJump = AnimationUtils.loadAnimation(this, R.anim.hyperspace_jump);
image.startAnimation(hyperspaceJump);
xem thêm:

Bộ nội suy

Bộ nội suy là một công cụ sửa đổi ảnh động được xác định trong tệp XML ảnh hưởng đến tốc độ thay đổi trong ảnh động. Công cụ này cho phép các hiệu ứng ảnh động hiện có được tăng tốc, giảm tốc, lặp lại, đẩy trang, v.v.

Bộ nội suy được áp dụng cho phần tử ảnh động có thuộc tính android:interpolator, giá trị của thuộc tính này tham chiếu đến tài nguyên của bộ nội suy.

Tất cả các bộ nội suy có trong Android đều là lớp con của lớp Interpolator. Đối với mỗi lớp bộ nội suy, Android sẽ bao gồm một tài nguyên công khai mà bạn có thể tham chiếu để áp dụng bộ nội suy cho ảnh động bằng cách sử dụng thuộc tính android:interpolator. Bảng sau đây chỉ định tài nguyên để sử dụng cho từng bộ nội suy:

Lớp bộ nội suyMã tài nguyên
AccelerateDecelerateInterpolator @android:anim/accelerate_decelerate_interpolator
AccelerateInterpolator @android:anim/accelerate_interpolator
AnticipateInterpolator @android:anim/anticipate_interpolator
AnticipateOvershootInterpolator @android:anim/anticipate_overshoot_interpolator
BounceInterpolator @android:anim/bounce_interpolator
CycleInterpolator @android:anim/cycle_interpolator
DecelerateInterpolator @android:anim/decelerate_interpolator
LinearInterpolator @android:anim/linear_interpolator
OvershootInterpolator @android:anim/overshoot_interpolator

Dưới đây là cách bạn có thể áp dụng một trong các bộ này bằng thuộc tính android:interpolator:

<set android:interpolator="@android:anim/accelerate_interpolator">
    ...
</set>

Bộ nội suy tuỳ chỉnh

Nếu không hài lòng với bộ nội suy do nền tảng cung cấp (liệt kê trong bảng ở trên), bạn có thể tạo tài nguyên bộ nội suy tuỳ chỉnh với các thuộc tính đã sửa đổi. Chẳng hạn bạn có thể điều chỉnh tốc độ tăng tốc cho AnticipateInterpolator hoặc điều chỉnh số chu kỳ cho CycleInterpolator. Để làm điều đó, bạn cần tạo tài nguyên bộ nội suy của riêng mình trong một tệp XML.

vị trí tệp:
res/anim/filename.xml
Tên tệp sẽ được dùng làm mã nhận dạng tài nguyên.
loại dữ liệu tài nguyên được biên dịch:
Con trỏ tài nguyên đến đối tượng bộ nội suy tương ứng.
mã tham chiếu tài nguyên:
Trong XML: @[package:]anim/filename
cú pháp:
<?xml version="1.0" encoding="utf-8"?>
<InterpolatorName xmlns:android="http://schemas.android.com/apk/res/android"
    android:attribute_name="value"
    />

Nếu không áp dụng thuộc tính nào thì bộ nội suy của bạn sẽ hoạt động giống hệt các thuộc tính do nền tảng cung cấp (liệt kê trong bảng ở trên).

phần tử:
Lưu ý là mỗi quá trình triển khai Interpolator sẽ bắt đầu bằng tên ở dạng chữ thường, khi được xác định trong XML.

<accelerateDecelerateInterpolator>
Tốc độ thay đổi bắt đầu và kết thúc từ từ nhưng tăng tốc ở giữa quá trình.

Không có thuộc tính nào.

<accelerateInterpolator>
Tốc độ thay đổi bắt đầu từ từ, sau đó tăng tốc dần.

thuộc tính:

android:factor
Số thực có độ chính xác đơn. Tốc độ tăng tốc (mặc định là 1).
<anticipateInterpolator>
Sự thay đổi bắt đầu lùi lại phía sau rồi hất lên phía trước.

thuộc tính:

android:tension
Số thực có độ chính xác đơn. Mức độ căng cần áp dụng (mặc định là 2).
<anticipateOvershootInterpolator>
Thay đổi bắt đầu lùi lại phía sau, hất lên phía trước và vượt quá giá trị mục tiêu, sau đó kết thúc ở giá trị cuối cùng.

thuộc tính:

android:tension
Số thực có độ chính xác đơn. Mức độ căng cần áp dụng (mặc định là 2).
android:extraTension
Số thực có độ chính xác đơn. Lượng nhân với sức căng (mặc định là 1,5).
<bounceInterpolator>
Thay đổi sẽ bật nảy khi kết thúc.

Không có thuộc tính nào

<cycleInterpolator>
Lặp lại ảnh động trong một số chu kỳ được chỉ định. Tốc độ thay đổi tuân theo một mẫu hình sin.

thuộc tính:

android:cycles
Số nguyên. Số chu kỳ (mặc định là 1).
<decelerateInterpolator>
Tốc độ thay đổi bắt đầu nhanh chóng, sau đó giảm tốc.

thuộc tính:

android:factor
Số thực có độ chính xác đơn. Tốc độ giảm tốc (mặc định là 1).
<linearInterpolator>
Tốc độ thay đổi không đổi.

Không có thuộc tính nào.

<overshootInterpolator>
Sự thay đổi hất về phía trước và vượt quá giá trị cuối cùng, sau đó quay trở lại.

thuộc tính:

android:tension
Số thực có độ chính xác đơn. Mức độ căng cần áp dụng (mặc định là 2).
ví dụ:

Tệp XML được lưu vào res/anim/my_overshoot_interpolator.xml:

<?xml version="1.0" encoding="utf-8"?>
<overshootInterpolator xmlns:android="http://schemas.android.com/apk/res/android"
    android:tension="7.0"
    />

XML của ảnh động này sẽ áp dụng bộ nội suy:

<scale xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@anim/my_overshoot_interpolator"
    android:fromXScale="1.0"
    android:toXScale="3.0"
    android:fromYScale="1.0"
    android:toYScale="3.0"
    android:pivotX="50%"
    android:pivotY="50%"
    android:duration="700" />

Ảnh động dạng khung

Ảnh động được xác định trong XML hiển thị một chuỗi hình ảnh theo thứ tự (như một thước phim).

vị trí tệp:
res/drawable/filename.xml
Tên tệp sẽ được dùng làm mã nhận dạng tài nguyên.
loại dữ liệu tài nguyên được biên dịch:
Con trỏ tài nguyên đến AnimationDrawable.
mã tham chiếu tài nguyên:
Trong Java: R.drawable.filename
Trong XML: @[package:]drawable.filename
cú pháp:
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot=["true" | "false"] >
    <item
        android:drawable="@[package:]drawable/drawable_resource_name"
        android:duration="integer" />
</animation-list>
phần tử:
<animation-list>
Bắt buộc. Đây phải là phần tử gốc. Chứa một hoặc nhiều phần tử <item>.

thuộc tính:

android:oneshot
Boolean. "đúng" nếu bạn muốn thực hiện hoạt ảnh một lần; "sai" nếu bạn lặp lại ảnh động.
<item>
Một khung ảnh động. Phải là phần tử con của phần tử <animation-list>.

thuộc tính:

android:drawable
Tài nguyên có thể vẽ. Đối tượng có thể vẽ để sử dụng cho khung này.
android:duration
Số nguyên. Thời lượng hiển thị khung này, tính bằng mili giây.
ví dụ:
Tệp XML được lưu vào res/drawable/rocket_thrust.xml:
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot="false">
    <item android:drawable="@drawable/rocket_thrust1" android:duration="200" />
    <item android:drawable="@drawable/rocket_thrust2" android:duration="200" />
    <item android:drawable="@drawable/rocket_thrust3" android:duration="200" />
</animation-list>
Mã xử lý ứng dụng này sẽ đặt ảnh động làm nền cho một Chế độ xem, sau đó phát ảnh động:

Kotlin

val rocketImage: ImageView = findViewById(R.id.rocket_image)
rocketImage.setBackgroundResource(R.drawable.rocket_thrust)

val rocketAnimation = rocketImage.background
if (rocketAnimation is Animatable) {
    rocketAnimation.start()
}

Java

ImageView rocketImage = (ImageView) findViewById(R.id.rocket_image);
rocketImage.setBackgroundResource(R.drawable.rocket_thrust);

rocketAnimation = rocketImage.getBackground();
if (rocketAnimation instanceof Animatable) {
    ((Animatable)rocketAnimation).start();
}
xem thêm: