【问题标题】:Simple animation for floating action button in android?android中浮动动作按钮的简单动画?
【发布时间】:2017-02-05 18:19:53
【问题描述】:

我需要一个非常简单的解释,说明如何在单击时为“添加到购物车”FloatingActionButton 设置动画。我想要的只是平滑的“左右”或“上下”运动动画。

请看下面的代码

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    android:weightSum="1"
    android:background="@color/cardview_light_background">    

    <android.support.design.widget.CoordinatorLayout
        android:id="@+id/main_content"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <android.support.design.widget.FloatingActionButton
            android:layout_width="54dp"
            android:layout_height="54dp"
            android:layout_gravity="bottom|right"
            android:src="@mipmap/ic_add_shopping_cart_black_24dp"
            android:layout_marginBottom="40dp"
            android:layout_marginRight="30dp"
            app:backgroundTint="@android:color/holo_blue_light" />

    </android.support.design.widget.CoordinatorLayout>
</LinearLayout>

提前谢谢你!

【问题讨论】:

  • 添加更多解释。你想达到什么目的?
  • 所以我只想让我的浮动动作按钮在单击时上下或左右摇动动画。

标签: android android-animation floating-action-button


【解决方案1】:

试试AndroidViewAnimations 库。这个库提供了一种简单的方法来为你的视图设置动画。有很多影响。例如

YoYo.with(Techniques.Tada)
.duration(700)
.playOn(findViewById(R.id.edit_area));

【讨论】:

  • @Irtaza Safi 在我看来,您可以将您的工厂添加到布局中(例如线性布局),并将它们放在您想要显示的视图中。然后你可以设置 android:layout_gravity="bottom|right" 到这个布局
  • API 看起来很酷。使用库进行动画处理时,当我为 android.support.design.widget.FloatingActionButton 引用视图时 - 使用数据绑定 YoYo.with(Techniques.Pulse).duration(700).playOn(mBinding.floatingActionButton); - 那里的 xml 设置(如 alphascaleX 等)正在丢失。解决此问题的一种方法是通过new Handler().postDelayed(new Runnable() { .. }, 700); 将xml 更新回Java 中定义的设置.. 延迟允许持续时间完成.. 但对于scaleX 之类的事情,它们会被重置.. “动画平滑度”正在丢失
【解决方案2】:

floatingActionButton.animate().xBy(10).yBy(10);

在其onClick!随意给坐标!

shake.xml > res/anim/shake.xml(不需要额外的库,你可以自定义这个xml

<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate android:duration="150"
        android:fromXDelta="-10%"
        android:repeatCount="5"
        android:repeatMode="reverse"
        android:toXDelta="10%"/>
</set>

..

final FloatingActionButton floatingActionButton = (FloatingActionButton) findViewById(R.id.fab);
floatingActionButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Animation anim = android.view.animation.AnimationUtils.loadAnimation(floatingActionButton.getContext(),  R.anim.shake);
        anim.setDuration(200L);
        floatingActionButton.startAnimation(anim);
    }
});

【讨论】:

  • 谢谢!这似乎是一个更直接的解决方案
  • @Irtaza Safi 我不喜欢 2 使用库来做这样简单的事情,但是库的答案很快就会被接受:| ,任何方式我的都是简单的,如果你喜欢随意使用它^_^祝你好运
  • 我同意。只是当你是某个领域的菜鸟时,图书馆的答案似乎更直接。你的回答肯定有助于我理解它在后台是如何工作的。
【解决方案3】:

看看这个:

https://github.com/Scalified/fab

它有一个从左到右或从上到下的移动动画

在你的毕业典礼中:

    dependencies {
    compile 'com.scalified:fab:1.1.3'
}

在布局中:

    <RelativeLayout 
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:fab="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        >
        <com.scalified.fab.ActionButton 
            android:id="@+id/action_button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true" 
            android:layout_alignParentRight="true"
            android:layout_marginRight="@dimen/fab_margin"
            android:layout_marginBottom="@dimen/fab_margin"
            />
</RelativeLayout>

现在搬家使用:

 // And then find it within the content view:
ActionButton actionButton = (ActionButton) findViewById(R.id.action_button);
// Initialize the moving distance
int distance = 100.0f // in density-independent pixels

// Move ActionButton left
actionButton.moveLeft(distance);

// Move ActionButton up
actionButton.moveUp(distance);

// Move ActionButton right
actionButton.moveRight(distance);

// Move ActionButton down
actionButton.moveDown(distance);

【讨论】:

    猜你喜欢
    • 2015-11-08
    • 2015-03-11
    • 1970-01-01
    • 2015-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-19
    相关资源
    最近更新 更多