0

我有四个需要加载的图像。我想要播放一个动画,等待 500 毫秒,另一个播放,等待 500 毫秒,等等。动画所做的只是将 alpha 从 255 更改为 0,然后再返回 255。所有四个 imageViews 都需要该动画。

我目前有两个问题。

1.) 所有图像同时播放。
2.) 下次调用该方法时,动画不起作用。

public void computerLights()
{

    ImageView green = (ImageView)findViewById(R.id.imgViewGreen);
    ImageView red = (ImageView)findViewById(R.id.imgViewRed);
    ImageView blue = (ImageView)findViewById(R.id.imgViewBlue);
    ImageView yellow = (ImageView)findViewById(R.id.imgViewYellow);

    AlphaAnimation transparency = new AlphaAnimation(1, 0);

    transparency.setDuration(500);
    transparency.start();
    green.startAnimation(transparency);
    red.startAnimation(transparency);
    blue.startAnimation(transparency);
    yellow.startAnimation(transparency);
}
4

1 回答 1

0

我不确定这是否是最优雅的解决方案,但是您可以使用可以以 500 毫秒间隔发送消息的处理程序轻松实现这一点。

private int mLights = new ArrayList<ImageView>();
private int mCurrentLightIdx = 0;
private Handler mAnimationHandler = new Handler(){

    @Override
    public void handleMessage(Message msg) {
        super.handleMessage(msg);

        ImageView currentLightIdx = mLights.get(currentLight);

        AlphaAnimation transparency = new AlphaAnimation(1, 0);

        transparency.setDuration(500);
        transparency.start();
        currentLight.startAnimation(transparency);

        currentLightIdx++;
        if(currentLightIdx < mLights.size()){
            this.sendMessageDelayed(new Message(), 500);
    }
};

public void computerLights()
{

    ImageView green = (ImageView)findViewById(R.id.imgViewGreen);
    ImageView red = (ImageView)findViewById(R.id.imgViewRed);
    ImageView blue = (ImageView)findViewById(R.id.imgViewBlue);
    ImageView yellow = (ImageView)findViewById(R.id.imgViewYellow);

    mLights.add(green);
    mLights.add(red);
    mLights.add(blue);
    mLights.add(yellow);

    mAnimationHandler.sendMessage(new Message());
}

在发送第一条消息后,处理程序将继续每 500 毫秒发送一次消息,直到所有动画都已启动。

于 2013-04-07T04:06:17.937 回答