Animasyonları karo

Kartlarınızı aşağıdakiler de dahil olmak üzere birkaç farklı şekilde canlandırabilirsiniz:

Kaydırma geçişi gösterme

Bir değerden diğerine yumuşak bir geçiş göstermek için aşağıdaki kod snippet'inde gösterildiği gibi bir öğe için ara animasyonlar etkinleştirebilirsiniz:

private var startValue = 15f
private var endValue = 105f
private val animationDurationInMillis = 2000L // 2 seconds

override fun onTileRequest(requestParams: RequestBuilders.TileRequest): ListenableFuture<Tile> {
    val circularProgressIndicator =
        CircularProgressIndicator.Builder()
            .setProgress(
                FloatProp.Builder(/* static value */ 0.25f)
                    .setDynamicValue(
                        // Or you can use some other dynamic object, for example
                        // from the platform and then at the end of expression
                        // add animate().
                        DynamicFloat.animate(
                            startValue,
                            endValue,
                            AnimationSpec.Builder()
                                .setAnimationParameters(
                                    AnimationParameters.Builder()
                                        .setDurationMillis(animationDurationInMillis)
                                        .build()
                                )
                                .build(),
                        )
                    )
                    .build()
            )
            .build()

    return Futures.immediateFuture(
        Tile.Builder()
            .setResourcesVersion(RESOURCES_VERSION)
            .setTileTimeline(Timeline.fromLayoutElement(circularProgressIndicator))
            .build()
    )
}

Yay yönünü ayarlama

Kartınızda yay varsa yay çizgisinin veya metninin her zaman kullanıcının seçtiği dilin varsayılan metin yönünde büyümesini istemeyebilirsiniz. Yay büyüme yönünü belirtmek için ArcDirection API'lerini kullanın:

public override fun onTileRequest(
    requestParams: RequestBuilders.TileRequest
): ListenableFuture<Tile> {
    return Futures.immediateFuture(
        Tile.Builder()
            .setResourcesVersion(RESOURCES_VERSION)
            .setTileTimeline(
                Timeline.fromLayoutElement(
                    EdgeContentLayout.Builder(deviceParameters)
                        .setResponsiveContentInsetEnabled(true)
                        .setEdgeContent(
                            Arc.Builder()
                                // Arc should always grow clockwise.
                                .setArcDirection(LayoutElementBuilders.ARC_DIRECTION_CLOCKWISE)
                                .addContent(
                                    ArcLine.Builder()
                                        // Set color, length, thickness, and more.
                                        // Arc should always grow clockwise.
                                        .setArcDirection(
                                            LayoutElementBuilders.ARC_DIRECTION_CLOCKWISE
                                        )
                                        .build()
                                )
                                .build()
                        )
                        .build()
                )
            )
            .build()
    )
}

Yumuşak bir karartma veya kaydırma efekti gösterme

Bir öğenin kartta göründüğünü veya kaybolduğunu daha net bir şekilde belirtmek ya da kartın değerinde gerçekleşen bir adım değişikliğini daha belirgin bir şekilde göstermek için kart animasyonlarınızda solma ve kaydırma efektlerini kullanın.

Bir kart düzeninde değeri değişen bir öğe varsa kart, öğenin çıkış animasyonunu gösterir, ardından düzeni günceller ve öğenin giriş animasyonunu gösterir.

Şeffaflaşma geçişleri

Aşağıdaki kod snippet'inde, DefaultContentTransitions'daki yardımcı yöntemler kullanılarak nasıl kaydırma geçişi yapılacağı gösterilmektedir. Özel FadeInTransition ve FadeOutTransition nesneleri tanımlamak için geçiş ayarlayıcı yöntemlerinde sırasıyla setFadeIn() ve setFadeOut() çağrılarını kullanın.

public override fun onTileRequest(
    requestParams: RequestBuilders.TileRequest
): ListenableFuture<Tile> {
    // Assumes that you've defined a custom helper method called
    // getTileTextToShow().
    val tileText = getTileTextToShow()
    return Futures.immediateFuture(
        Tile.Builder()
            .setResourcesVersion(RESOURCES_VERSION)
            .setTileTimeline(
                Timeline.fromLayoutElement(
                    Text.Builder(this, tileText)
                        .setModifiers(
                            Modifiers.Builder()
                                .setContentUpdateAnimation(
                                    AnimatedVisibility.Builder()
                                        .setEnterTransition(DefaultContentTransitions.fadeIn())
                                        .setExitTransition(DefaultContentTransitions.fadeOut())
                                        .build()
                                )
                                .build()
                        )
                        .build()
                )
            )
            .build()
    )
}

Slayt geçişleri

Bu diğer kod snippet'inde, DefaultContentTransitions'daki yardımcı yöntemler kullanılarak kaydırarak girme ve kaydırarak çıkma geçişlerinin nasıl yapılacağı gösterilmektedir. Geçiş ayarlayıcı yöntemlerinde sırasıyla setSlideIn() ve setSlideOut()'i çağırarak özel SlideInTransition ve SlideOutTransition nesneleri de tanımlayabilirsiniz.

public override fun onTileRequest(
    requestParams: RequestBuilders.TileRequest
): ListenableFuture<Tile> {
    // Assumes that you've defined a custom helper method called
    // getTileTextToShow().
    val tileText = getTileTextToShow()
    return Futures.immediateFuture(
        Tile.Builder()
            .setResourcesVersion(RESOURCES_VERSION)
            .setTileTimeline(
                Timeline.fromLayoutElement(
                    Text.Builder(this, tileText)
                        .setModifiers(
                            Modifiers.Builder()
                                .setContentUpdateAnimation(
                                    AnimatedVisibility.Builder()
                                        .setEnterTransition(
                                            DefaultContentTransitions.slideIn(
                                                ModifiersBuilders.SLIDE_DIRECTION_LEFT_TO_RIGHT
                                            )
                                        )
                                        .setExitTransition(
                                            DefaultContentTransitions.slideOut(
                                                ModifiersBuilders.SLIDE_DIRECTION_LEFT_TO_RIGHT
                                            )
                                        )
                                        .build()
                                )
                                .build()
                        )
                        .build()
                )
            )
            .build()
    )
}

Dönüşümleri gösterme

Bir karodaki belirli bir öğeye veya alana dikkat çekmek için karoya döndürme, ölçeklendirme ve kaydırma gibi çeşitli dönüşüm türleri uygulayabilirsiniz.

Dönüşümlerle ilişkili birçok kayan nokta değeri, bu dönüşümleri animasyonlu olarak göstermenize olanak tanıyan dinamik ifadeleri kabul eder.

Döndürme

Özelleştirilebilir bir pivot noktası etrafında saat yönünde dönme işlemi gerçekleştirmek için aşağıdakine benzer bir kod kullanın:

return Futures.immediateFuture(
    Tile.Builder()
        .setResourcesVersion(RESOURCES_VERSION)
        .setTileTimeline(
            Timeline.fromLayoutElement(
                Text.Builder(this, someTileText)
                    .setModifiers(
                        Modifiers.Builder()
                            .setTransformation(
                                ModifiersBuilders.Transformation.Builder()
                                    // Set the pivot point 50 dp from the left edge
                                    // and 100 dp from the top edge of the screen.
                                    .setPivotX(dp(50f))
                                    .setPivotY(dp(100f))
                                    // Rotate the element 45 degrees clockwise.
                                    .setRotation(degrees(45f))
                                    .build()
                            )
                            .build()
                    )
                    .build()
            )
        )
        .build()
)

Ölçeklendirme

Bir öğeyi yatay ve dikey ölçeklendirme faktörlerine göre büyütmek veya küçültmek için aşağıdakine benzer bir kod kullanın:

return Futures.immediateFuture(
    Tile.Builder()
        .setResourcesVersion(RESOURCES_VERSION)
        .setTileTimeline(
            Timeline.fromLayoutElement(
                Text.Builder(this, someTileText)
                    .setModifiers(
                        Modifiers.Builder()
                            .setTransformation(
                                ModifiersBuilders.Transformation.Builder()
                                    // Set the pivot point 50 dp from the left edge
                                    // and 100 dp from the top edge of the screen.
                                    .setPivotX(dp(50f))
                                    .setPivotY(dp(100f))
                                    // Shrink the element by a scale factor
                                    // of 0.5 horizontally and 0.75 vertically.
                                    .setScaleX(FloatProp.Builder(0.5f).build())
                                    .setScaleY(
                                        FloatProp.Builder(0.75f).build()
                                    )
                                    .build()
                            )
                            .build()
                    )
                    .build()
            )
        )
        .build()
)

Geometrik çeviri

Bir öğeyi ekranda yatay veya dikey olarak belirli bir yoğunluk pikseli (dp) sayısı kadar taşımak için aşağıdakine benzer bir kod kullanın:

return Futures.immediateFuture(
    Tile.Builder()
        .setResourcesVersion(RESOURCES_VERSION)
        .setTileTimeline(
            Timeline.fromLayoutElement(
                Text.Builder(this, someTileText)
                    .setModifiers(
                        Modifiers.Builder()
                            .setTransformation(
                                ModifiersBuilders.Transformation.Builder()
                                    // Translate (move) the element 60 dp to the right
                                    // and 80 dp down.
                                    .setTranslationX(dp(60f))
                                    .setTranslationY(dp(80f))
                                    .build()
                            )
                            .build()
                    )
                    .build()
            )
        )
        .build()
)

Önemli bilgileri animasyonun ortasında göstermeyin

Animasyonların devre dışı bırakıldığı birkaç durum vardır:

  • Sistemin karo oluşturma işlemi, tüm karolar için animasyonlar devre dışı bırakabilir.
  • Bir kartta aynı anda yalnızca 4 öğe animasyonlu olabilir. Aynı anda 4'ten fazla öğeyi animasyonlu hale getirmeye çalışırsanız bunların hepsi animasyon göstermez.

Bir animasyon devre dışı bırakıldığında öğeler statik olur ve animasyon bitiş değerini gösterir. Bu nedenle, önemli bilgileri göstermek için animasyonun davranışına (ör. süresi) güvenmeyin.