Tài nguyên ảnh động

Tài nguyên ảnh động có thể xác định một trong 2 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 bằng Animator.
Ảnh động dạng khung hiển thị

Bạn có thể tạo 2 loại ảnh động với khung của ảnh động khung hiển thị:

Ả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 đượ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 AnimatorSet.

Bạn có thể chỉ định các thẻ <set> lồng nhau để nhóm thêm các ảnh động. Mỗi <set> có thể xác định thuộc tính ordering của 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ịNội dung 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 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 View. 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 XML. Bạn phải tăng cường tài nguyên XML ảnh động bằng cách gọi loadAnimator() và gọi 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ố, chẳng hạn như #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ố, chẳng hạn như #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ịNội dung mô tả
intTypeChỉ định các giá trị được tạo ảnh động là số nguyên
floatType (mặc định)Chỉ định các giá trị được tạo ảnh độ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ố, chẳng hạn như #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ố, chẳng hạn như #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ịNội dung mô tả
intTypeChỉ định các giá trị được tạo ảnh động là số nguyên
floatType (mặc định)Chỉ định các giá trị được tạo ảnh độ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, hãy tăng cường tài nguyên XML trong mã của bạn thành một đối tượng AnimatorSet, sau đó đặt đối tượng mục tiêu cho tất cả ảnh động trước khi bắt đầu tập hợp ả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 để đảm bảo 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:

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

Khung của ảnh động dạng khung hiển thị hỗ trợ cả ảnh động lấy giá trị giữa lẫn ảnh động theo từng khung, cả hai đều đượ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 lấy giá trị giữa

Là một ảnh động được xác định trong XML thực hiện hiệu ứng chuyển đổi trên một nội dung đồ hoạ như xoay, làm mờ, di chuyển và kéo giãn.

vị trí tệp:
res/anim/filename.xml
Tên tệp đượ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 thành phần gốc: thành phần <alpha>, <scale>, <translate>, <rotate> hoặc <set> lưu giữ một nhóm (hoặc nhóm) các thành phần ảnh động khác (thậm chí là các thành phần <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 chứ không phải là 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. Xem nội dung thảo luận sau để biết thêm thông tin về bộ nội suy.
android:shareInterpolator
Boolean. "true" 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ợ, hãy xem tài liệu tham khảo về lớp cho Animation (có các thuộc tính XML đượ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 đều là giảm và sang bên 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ợ, hãy xem tài liệu tham khảo về lớp cho Animation (có các thuộc tính XML được phần tử này kế thừa).

<translate>
Chuyển động theo chiều dọc và/hoặc ngang. Đại diện cho TranslateAnimation. Hỗ trợ các thuộc tính sau ở một trong 3 định dạng sau:
  • Giá trị từ -100 đến 100 kết thúc bằng "%", cho biết tỷ lệ phần trăm liên quan đến chính thuộc tính đó.
  • Giá trị từ -100 đến 100 kết thúc bằng "%p", cho biết tỷ lệ phần trăm liên quan đến phần tử gốc của thuộc tính đó.
  • Giá trị số thực có độ chính xác đơn không có hậu tố, cho biết giá trị tuyệt đối.

Thuộc tính:

android:fromXDelta
Số thực có độ chính xác đơn hoặc tỷ lệ phần trăm. Độ lệch X bắt đầu. Được biểu thị bằng điểm ảnh so với vị trí thông thường (chẳng hạn như "5"), 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 theo tỷ lệ phần trăm so với chiều rộng của phần tử 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. Độ lệch X kết thúc. Được biểu thị bằng điểm ảnh so với vị trí thông thường (chẳng hạn như "5"), 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 theo tỷ lệ phần trăm so với chiều rộng của phần tử 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. Độ lệch Y bắt đầu. Được biểu thị bằng điểm ảnh so với vị trí thông thường (chẳng hạn như "5"), 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 theo tỷ lệ phần trăm so với chiều cao của phần tử 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. Độ lệch Y kết thúc. Được biểu thị bằng điểm ảnh so với vị trí thông thường (chẳng hạn như "5"), 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 theo tỷ lệ phần trăm so với chiều cao của phần tử mẹ (chẳng hạn như "5%p").

Để biết thêm các thuộc tính mà <translate> hỗ trợ, hãy xem tài liệu tham khảo về lớp cho Animation (có các thuộc tính XML đượ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 biểu thị bằng điểm ảnh so với cạnh trái của đối tượng (chẳng hạn như "5"), 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 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 biểu thị bằng điểm ảnh so với cạnh trên của đối tượng (chẳng hạn như "5"), 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 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ợ, hãy xem tài liệu tham khảo về lớp cho Animation (có các thuộc tính XML đượ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 sau đây á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 giúp các hiệu ứng ảnh động hiện có được tăng tốc, giảm tốc, lặp lại, bật nảy lên, 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, 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 mức độ tăng tốc cho AnticipateInterpolator hoặc điều chỉnh số chu kỳ cho CycleInterpolator. Để thực hiện việc này, bạn cần tạo tài nguyên bộ nội suy của riêng mình trong tệp XML.

vị trí tệp:
res/anim/filename.xml
Tên tệp đượ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 bạn không áp dụng bất kỳ thuộc tính nào, thì bộ nội suy của bạn sẽ hoạt động giống hệt như các thuộc tính do nền tảng cung cấp, như nêu trong bảng trước.

phần tử:
Xin lưu ý rằng mỗi cách triển khai Interpolator, khi được xác định trong XML, sẽ có tên bắt đầu bằng một chữ cái viết thường.

<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. Mức độ tăng tốc. Giá trị 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. Giá trị mặc định là 2.
<anticipateOvershootInterpolator>
Sự 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. Giá trị mặc định là 2.
android:extraTension
Số thực có độ chính xác đơn. Giá trị nhân với mức độ căng. Giá trị mặc định là 1,5.
<bounceInterpolator>
Thay đổi sẽ bật nảy lên 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ỳ. Giá trị 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. Mức độ giảm tốc. Giá trị 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. Giá trị 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 ảnh động này á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 đượ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. "true" nếu bạn muốn thực hiện ảnh động một lần; hãy "false" để 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 sau đây sẽ đặt ảnh động làm nền cho View, 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: