Android ImageViewanimation

我已经创build了一个图像视图和networking视图的布局。 Web视图被设置为具有已经消失的默认可见性。 当活动启动时,它首先显示图像视图,当web视图完成加载它的url时,它将自己标记为可见,并且imageview被标记为隐藏。

当显示图像视图时,我希望它可以反复旋转只是为了添加一点点匹配。

我以前从来没有在Android上做过animation,当我问上网时发现的所有post都没有帮助; 因此,我已经回到SO寻求帮助。

所以如果我从这开始

final ImageView splash = (ImageView)findViewById(R.id.splash); 

如何创build重复的旋转animation并将其应用于ImageView?

再次感谢!

使用RotateAnimation ,将透视点设置为图像的中心。

 RotateAnimation anim = new RotateAnimation(0f, 350f, 15f, 15f); anim.setInterpolator(new LinearInterpolator()); anim.setRepeatCount(Animation.INFINITE); anim.setDuration(700); // Start animating the image final ImageView splash = (ImageView) findViewById(R.id.splash); splash.startAnimation(anim); // Later.. stop the animation splash.setAnimation(null); 

如何旋转中心的图像:

 ImageView view = ... //Initialize ImageView via FindViewById or programatically RotateAnimation anim = new RotateAnimation(0.0f, 360.0f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); //Setup anim with desired properties anim.setInterpolator(new LinearInterpolator()); anim.setRepeatCount(Animation.INFINITE); //Repeat animation indefinitely anim.setDuration(700); //Put desired duration per anim cycle here, in milliseconds //Start animation view.startAnimation(anim); //Later on, use view.setAnimation(null) to stop it. 

这将导致图像围绕其中心旋转(0.5或50%的宽度/高度)。 我将这篇文章发布给未来的Google读者,因为他们希望将图片旋转到中心位置,而不是以绝对像素为单位定义中心。

您也可以简单地使用旋转animationfunction。 在ImageView上运行一个特定的animation,预定的时间。

 Animation rotate = AnimationUtils.loadAnimation([context], R.anim.rotate_picture); splash.startAnimation(rotate); 

然后在res / anim中创build一个名为rotate_picture的animationXML文件,内容为:

 <?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" android:shareInterpolator="false"> <rotate android:fromDegrees="0" android:toDegrees="360" android:duration="5000" android:pivotX="50%" android:pivotY="50%"> </rotate> </set> 

现在不幸的是,这只会运行一次。 你需要一个循环来让它在等待的时候重复animation。 我尝试了一些,并让我的程序卡在无限循环中,所以我不确定最好的方法。 编辑:克里斯托弗的答案提供了如何使其正确循环的信息,所以删除我的关于单独的线程不好的build议!

一种方法 – 将您的图像分成N个,每次都稍微旋转一下。 我会说5就够了。 然后在drawable中创build这样的东西

 <animation-list android:id="@+id/handimation" android:oneshot="false" xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/progress1" android:duration="150" /> <item android:drawable="@drawable/progress2" android:duration="150" /> <item android:drawable="@drawable/progress3" android:duration="150" /> </animation-list> 

代码开始

 progress.setVisibility(View.VISIBLE); AnimationDrawable frameAnimation = (AnimationDrawable)progress.getDrawable(); frameAnimation.setCallback(progress); frameAnimation.setVisible(true, true); 

代码停止

 AnimationDrawable frameAnimation = (AnimationDrawable)progress.getDrawable(); frameAnimation.stop(); frameAnimation.setCallback(null); frameAnimation = null; progress.setVisibility(View.GONE); 

这里更多

 imgDics = (ImageView) v.findViewById(R.id.img_player_tab2_dics); imgDics.setOnClickListener(onPlayer2Click); anim = new RotateAnimation(0f, 360f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); anim.setInterpolator(new LinearInterpolator()); anim.setRepeatCount(Animation.INFINITE); anim.setDuration(4000); // Start animating the image imgDics.startAnimation(anim); 

在元素里面放:

 android:repeatCount="infinite" 

我发现,如果你使用.getWidth / 2等等,它不会工作,你需要得到的图像像素的数量,并自己除以2,然后只需键入最后2个参数。

所以说你的图像是一个120像素×120像素的平方,你的x和y将等于60个像素。 所以在你的代码中,你是对的:

 RotateAnimation anim = new RotateAnimation(0f, 350f, 60f, 60f); anim.setInterpolator(new LinearInterpolator()); anim.setRepeatCount(Animation.INFINITE); anim.setDuration(700); 

现在你的形象将围绕其中心。

不要硬编码图像边界。 只要使用:

 RotateAnimation anim = new RotateAnimation( fromAngle, toAngle, imageView.getDrawable().getBounds().width()/2, imageView.getDrawable().getBounds().height()/2);