簡體   English   中英

如何在 Android Studio 中翻譯按鈕動畫?

[英]How to do translate animation of button in Android Studio?

我試圖將一個按鈕從一個站點移動到另一個站點。 我設法移動了它,但是當它移動時,我必須點擊它之前所在的位置而不是點擊按鈕。 為什么會發生這種情況?

這是它的樣子 你可以看到最后當我點擊另一邊時,按鈕的陰影被激活了

我的代碼:

動畫xaml

移動.xml:

 <?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" android:fillAfter="true" > <translate android:fromYDelta="0%p" android:fromXDelta="0%p" android:toXDelta="-300" android:toYDelta="-300" android:duration="500" ></translate> </set>

在代碼中:

    Animation animation = AnimationUtils.loadAnimation(this,R.anim.move);
    btnNext.startAnimation(animation);

發生這種情況是因為動畫是通過更改translationX和 translationY 視圖屬性來執行的,而不是 ui 框架作者以其無窮小的智慧放置在繼承LayoutParams的外部類中的實際位置。 因此,單擊事件被分派到視圖的“原始”位置,該位置不考慮視圖轉換( 參考)。 android 中的動畫仍然相當乏味和野蠻,但至少有很多方法可以采用。 對於這種情況,LayoutParams 字段的 ValueAnimator 似乎是一個解決方案。 如果布局允許邊距,則它可能如下所示:

final ViewGroup.MarginLayoutParams lp = (ViewGroup.MarginLayoutParams) btnNext.getLayoutParams();
int initialX = displayWidth - btnNextWidth, finalX = displayWidth / 2;

ValueAnimator.ofInt(initialX, finalX)
    .setDuration(500)
    .addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
         @Override
         public void onAnimationUpdate(ValueAnimator valueAnimator) {
             Integer ax = (Integer) valueAnimator.getAnimatedValue();
             Log.i("anim", "x: " + ax);
             lp.leftMargin = ax;
             btnNext.requestLayout();
         }
    });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM