Gmail listview翻转动画

时间:2015-10-18 06:57:03

标签: android android-animation android-5.0-lollipop

我正在尝试创建一个动画,就像我们在Gmail的listview小部件中看到的一样。当我们选择行时,我们按下左边的圆圈,然后翻转成一个选中的标记。

我打算做的是创建一个带有两个缩放动画的动画集。由于一些奇怪的原因,它不起作用。

我暂时使用单个图像并将翻转应用到该图像上。这是我的anim.xml:

<?xml version="1.0" encoding="utf-8"?>
<set>
    <scale
        android:duration="2000"
        android:fromXScale="1.0"
        android:fromYScale="1.0"
        android:toXScale="0.0"
        android:toYScale="1.0"
        android:pivotX="50%"
        android:pivotY="50%"
        >
    </scale>
    <scale
        android:startOffset="2000"
        android:duration="2000"
        android:fromXScale="0.0"
        android:fromYScale="1.0"
        android:toXScale="1.0"
        android:toYScale="1.0"
        android:pivotX="50%"
        android:pivotY="50%"
        >
    </scale>
</set>

动画很容易阅读。我开始从100到0的比例,然后将其缩放回100.当我在imageview上应用它时,我根本看不到任何动画。

这是我加载动画的方式:

final AnimationSet animationSet = (AnimationSet) AnimationUtils.loadAnimation(this,R.anim.flip);
mCompanyProfileImage.startAnimation(animationSet);

我做错了什么?

3 个答案:

答案 0 :(得分:2)

你很幸运!因为我刚刚开发了一个新的库FlipView,其中包含基本的翻转动画并扩展ViewFlipper。我的意思是一个完全可自定义的库,您可以将任何类型的视图和布局与您想要的任何类型的动画和形状(以及更多)交换,包括您搜索的Gmail图像翻转。

请看一下。

答案 1 :(得分:1)

这是确切的答案:

1)在anim文件夹中定义两个动画xml文件:

scale_in.xml:

<?xml version="1.0" encoding="utf-8"?>
<scale
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:anim/decelerate_interpolator"
    android:fromXScale="0.0"
    android:toXScale="1.0"
    android:fromYScale="1.0"
    android:toYScale="1.0"
    android:pivotX="50%"
    android:fillAfter="false"
    android:duration="150" />

scale_out.xml:

<?xml version="1.0" encoding="utf-8"?>
<scale
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:anim/decelerate_interpolator"
    android:fromXScale="1.0"
    android:toXScale="0.0"
    android:fromYScale="1.0"
    android:toYScale="1.0"
    android:pivotX="50%"
    android:fillAfter="false"
    android:duration="150" />

2)在您的活动中:

Animation animation = AnimationUtils.loadAnimation(YourActivity.this, R.anim.scale_out);
layoutWithCircleDrawable.startAnimation(animation);

然后:

animation.setAnimationListener(new Animation.AnimationListener() {

            @Override
            public void onAnimationStart(Animation animation) {

            }

            @Override
            public void onAnimationRepeat(Animation animation) {
            }

            @Override
            public void onAnimationEnd(Animation animation) {
                //your code for change the layout image or ...

                Animation animation2 = AnimationUtils.loadAnimation(YourActivity.this, R.anim.scale_in);
                layoutWithCircleDrawable.startAnimation(animation2);
            }
        });

答案 2 :(得分:0)

我无法识别该程序中的任何特定缺陷,不知何故它对我起作用,如果您感兴趣,可以查看我的其他定制,希望它会对您有所帮助。 的 Javaclass

import android.animation.AnimatorSet;
import android.animation.AnimatorInflater;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.view.Menu;
import android.view.View;
import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;
import android.widget.Button;
import android.widget.ImageView;
public class MainActivity extends Activity {
    AnimatorSet set;
    Button horizontal,vertical;
     ImageView imgView;
     Animation in;
    Boolean check=false;
    protected void onCreate(Bundle savedInstanceState) {
        //TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        horizontal=(Button)findViewById(R.id.button);
        vertical=(Button)findViewById(R.id.button2);
         in = new AlphaAnimation(0.0f, 1.0f);
        in.setDuration(300);
        horizontal.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                imgView  = (ImageView) findViewById(R.id.imageview);
                set = (AnimatorSet) AnimatorInflater.loadAnimator(MainActivity.this, R.animator.animfliphorizontal);
                set.setTarget(imgView);
                set.start();
                anim();
            }


        });
        vertical.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
              imgView=(ImageView)findViewById(R.id.imageview);
                set = (AnimatorSet) AnimatorInflater.loadAnimator(MainActivity.this, R.animator.animflipvertical);
                set.setTarget(imgView);
                set.start();
                anim();
            }
        });
    }

    private void anim() {
        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
if(check==false)
{
    check=true;
    imgView.setImageResource(R.drawable.background2);
}
                else
{
    check=false;
    imgView.setImageResource(R.drawable.background);
}
                imgView.setAnimation(in);

            }
        }, 500);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }
}

下面你可以看到一个xml文件和两个不同的水平和垂直对象动画,检查出来

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity"
    >
    <ImageView
        android:id="@+id/imageview"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:src="@drawable/background"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true" />
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="HORIZONTAL"
        android:id="@+id/button"
        android:layout_centerVertical="true"
        android:layout_alignParentStart="true" />
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="VERTICAL"
        android:id="@+id/button2"
        android:layout_centerVertical="true"
        android:layout_toEndOf="@+id/imageview" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:text="FLIP MODE"
        android:id="@+id/textView"
        android:layout_above="@+id/button"
        android:layout_centerHorizontal="true" />
</RelativeLayout> 

和他们的2个动画文件夹

<?xml version="1.0" encoding="utf-8"?>
<!--animfliphorizontal-->
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <objectAnimator
        android:duration="1000"
        android:propertyName="rotationX"
        android:valueFrom="180"
        android:valueTo="0" >
    </objectAnimator>
</set>
<?xml version="1.0" encoding="utf-8"?>
<!--animflipvertical-->
<set xmlns:android="http://schemas.android.com/apk/res/android" android:ordering="sequentially" >
    <objectAnimator
        android:duration="1000"
        android:propertyName="rotationY"
        android:valueFrom="0"
        android:valueTo="180" >
    </objectAnimator>
</set>