声音与android中的动画

时间:2014-07-21 09:07:11

标签: android android-animation

嗨我正在进行幻灯片放映。幻灯片自动幻灯片放映这些图像是存储在数组中的用户选择的图像。现在我想将用户选择的音频与动画一起制作。但我不知道该怎么做这个。图像动画工作正常但是canot在背景播放声音。这是我的代码

final Handler mHandler = new Handler();

            // Create runnable for posting
            final Runnable mUpdateResults = new Runnable() {
                public void run() {

                        AnimateandSlideShow();
                             }
            };

           // mHandler.postDelayed(mUpdateResults, 300);
            int delay =300; // delay for 1 sec.

            int period = 9000; // repeat every 4 sec.

            Timer timer = new Timer();

            timer.scheduleAtFixedRate(new TimerTask() {


            public void run() {

                 mHandler.post(mUpdateResults);

            }

            }, delay, period);

            ////////end animation//////////////////

这里是animatedslideshow函数:

 private void AnimateandSlideShow() {
         // playsound();
         //  sound =new AnimationSound(SlideShow.this,uriaudio);
         //  sound.startsound();

           iv=(ImageView)findViewById(R.id.anim_view);

          iv.setImageURI(Uri.parse(allimgs.get(count%allimgs.size()).toString()));

          count++;
           anim = AnimationUtils.loadAnimation(SlideShow.this, R.anim.fade_in);

           // load your desire animation.
            iv.startAnimation(anim);

    }

和playound:

private void playsound()
      {
          MediaPlayer player = MediaPlayer.create(SlideShow.this, uriaudio); 
            player.setLooping(false); // Set looping 
            player.setVolume(100,100); 
            player.start(); 

      }

我不知道将playound函数放在处理程序中的哪个位置,以便音频以动画开头。

1 个答案:

答案 0 :(得分:1)

你可以播放声音并在AnimationListener的方法中停止它,如下所示:

MediaPlayer player = MediaPlayer.create(SlideShow.this, uriaudio); 
player.setLooping(false); // Set looping 
player.setVolume(100,100); 
final int mPlayerLength = 0;

anim.setAnimationListener(new AnimationListener() {

    @Override
    public void onAnimationStart(Animation animation) {
        player.seekTo(mPlayerLength);
        player.start();
    }

    @Override
    public void onAnimationRepeat(Animation animation) {
    }

    @Override
    public void onAnimationEnd(Animation animation) {
         if(player.isPlaying()){
            player.stop();
            mPlayerLength = player.getCurrentPosition();
        }
    }
};

希望它有所帮助。

修改

是的,final修饰符不允许您稍后更改。对不起。我没有运行代码。以下是替代方案:您可以在活动中实施AnimationListener。因此,您不需要将变量保留为final,以便在方法中访问它:

public class MyActivity extends Activity implements AnimationListener{

    int mPlayerLength = 0;  //global variable

    anim.setAnimationListener(this);       

    public void onAnimationStart(Animation animation) {
        // TODO Auto-generated method stub
        player.seekTo(mPlayerLength);
        player.start();
    }

    @Override
    public void onAnimationEnd(Animation animation) {
        // TODO Auto-generated method stub
        if(player.isPlaying()){
            player.stop();
            mPlayerLength = player.getCurrentPosition();
        }
    }

}

希望这是明确的并解决问题:)