我正在尝试创建一个动画,就像我们在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);
我做错了什么?
答案 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>