我有不同的图像,说100张左右的图像。现在,我想在它们上应用动画。我希望我的ImageView在指定的间隔后获取每个图像,但是当图像发生变化时,每个图像应该是FadeIn或FadeOut。我将我的图像放在@ drawable / [list_of_images] .xml文件中:
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="false">
<item android:drawable="@drawable/a1" android:duration="1000"/>
<item android:drawable="@drawable/a2" android:duration="2000"/>
<item android:drawable="@drawable/a3" android:duration="3000"/>
<item android:drawable="@drawable/a4" android:duration="500"/>
然后我可以使用以下方法根据ImageView中的时间间隔成功更改这些图像:
public class AnimTest extends Activity
{
AnimationDrawable myAnim;
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.anim);
ImageView myIV = (ImageView) findViewById(R.id.image_view);
myIV.setBackgroundResource(R.drawable.list_of_images.xml);
myAnim = (AnimationDrawable) myIV.getBackground();
}
public boolean onTouchEvent(MotionEvent event)
{
if (event.getAction() == MotionEvent.ACTION_DOWN)
{
myAnim.start();
return true;
}
return super.onTouchEvent(event);
}
}
问题在于我无法弄清楚如何对每个单独的图像应用淡入淡出效果,而它们会被上面的动画改变。我可以在整个图像列表中应用淡化动画,但不能在每个图像上执行此操作。我是否正确的方向来实现这一功能?如果没有,请引导我走上正确的道路。
此致 Khawar
答案 0 :(得分:3)
您可以尝试在动画上设置重复计数到imagecount-1,然后在动画中添加一个AnimationListener,在每次重复和开始时都会更改ImageView的背景图像。
这是一个使用RoboGuice的简单示例(它使代码更清晰,但对于您的问题没有任何区别):https://github.com/bostonandroid/batgirl/blob/master/src/org/roboguice/batgirl/Batgirl.java
public class Batgirl extends RoboActivity {
// Views
@InjectView(R.id.content) LinearLayout linearLayout;
// Resources
@InjectResource(R.anim.spin) Animation spin;
@InjectResource(R.integer.max_punches) int MAX_PUNCHES;
// Other Injections
@Inject ChangeTextAnimationListener changeTextAnimationListener;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// Set up the animation
linearLayout.setAnimation(spin);
spin.setAnimationListener(changeTextAnimationListener);
spin.setRepeatCount(MAX_PUNCHES - 1);
spin.start();
}
}
/**
* A simple animation listener that swaps out the text between repeats.
*/
class ChangeTextAnimationListener implements AnimationListener {
@InjectView(R.id.hello) TextView helloView;
@Inject Fist fist;
@Inject PackageInfo info;
public void onAnimationRepeat(Animation animation) {
onAnimationStart(animation);
}
public void onAnimationStart(Animation animation) {
helloView.setText( getNextTextString() ); // getNextTextString() not shown in this example
}
public void onAnimationEnd(Animation animation) {
}
}