首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SurfaceView不工作的淡入动画

SurfaceView不工作的淡入动画
EN

Stack Overflow用户
提问于 2015-02-17 16:29:43
回答 1查看 1.4K关注 0票数 0

动画在普通视图中工作得非常好。但是当我在SurfaceView上使用它时,它就会褪色,然后闪烁屏幕,然后启动视频。闪光灯看上去真傻,我得把它去掉。

代码语言:javascript
复制
public class MyDreamService extends DreamService implements SurfaceHolder.Callback, MediaPlayer.OnPreparedListener {
    private MediaPlayer mediaPlayer;
    private SurfaceHolder vidHolder;
    private SurfaceView vidSurface;
    private FrameLayout frameLayout;

    @Override
    public void onAttachedToWindow() {
        super.onAttachedToWindow();
        setInteractive(false);
        setFullscreen(true);
    }

    @Override
    public void onDreamingStarted() {
        super.onDreamingStarted();
        frameLayout = new FrameLayout(this);
        frameLayout.setLayoutParams(new
            ViewGroup.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT));

        vidSurface = new SurfaceView(MyDreamService.this);
        vidHolder = vidSurface.getHolder();
        vidHolder.addCallback(MyDreamService.this);
        frameLayout.addView(vidSurface,
            new FrameLayout.LayoutParams(
                ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));

        setContentView(frameLayout);
    }

    @Override
    public void onDreamingStopped() {
        super.onDreamingStopped();
        if(mediaPlayer != null) {
            if(mediaPlayer.isPlaying()) {
                mediaPlayer.stop();
            }
        }
    }

    @Override
    public void onDetachedFromWindow() {
        super.onDetachedFromWindow();
        if(mediaPlayer != null) {
            if(mediaPlayer.isPlaying()) {
                mediaPlayer.stop();
            }
            mediaPlayer.reset();
            mediaPlayer.release();
            mediaPlayer = null;
        }
    }

    @Override
    public void surfaceCreated(SurfaceHolder holder) {
        try {
            vidHolder = holder;
            mediaPlayer = MediaPlayer.create(this, R.raw.voice_activated_corgi);
            mediaPlayer.setLooping(true);
            mediaPlayer.setDisplay(holder);
            mediaPlayer.setOnPreparedListener(this);
        } catch(Exception e) {
            e.printStackTrace();
        }
    }

    @Override
    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
        vidHolder = holder;
    }

    @Override
    public void surfaceDestroyed(SurfaceHolder holder) {
    }

    @Override
    public void onPrepared(MediaPlayer mp) {
        mediaPlayer.start();
    }
}

这播放的视频很好,但如果我想要动画:

代码语言:javascript
复制
    ObjectAnimator fadeIn = ObjectAnimator.ofFloat(frameLayout, "alpha", .3f, 1f);
    fadeIn.setDuration(2000);

    final AnimatorSet mAnimationSet = new AnimatorSet();

    mAnimationSet.play(fadeIn);

    mAnimationSet.addListener(new AnimatorListenerAdapter() {
        @Override
        public void onAnimationEnd(Animator animation) {
            super.onAnimationEnd(animation);
            if(mediaPlayer != null) {
                mediaPlayer.start();
            }
            if(view != null) {
                view.setAlpha(0f);
            }
        }
    });
    mAnimationSet.start();

然后,经过多次迭代,它要么褪色为黑色,然后闪烁发射器就像一秒钟,然后启动视频;或只是根本不动!我该怎么办?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-17 16:29:43

我成功地修复了它,使用了一个覆盖视图,该视图逐渐变成黑色,一旦动画结束,将视图设置为不可见的,而不是删除它。

代码语言:javascript
复制
public class MyDreamService extends DreamService implements SurfaceHolder.Callback, MediaPlayer.OnPreparedListener {
    private MediaPlayer mediaPlayer;
    private SurfaceHolder vidHolder;
    private SurfaceView vidSurface;
    private FrameLayout frameLayout;
    private View view;

    @Override
    public void onAttachedToWindow() {
        super.onAttachedToWindow();
        setInteractive(false);
        setFullscreen(true);
    }

    @Override
    public void onDreamingStarted() {
        super.onDreamingStarted();
        frameLayout = new FrameLayout(this);
        frameLayout.setLayoutParams(new
            ViewGroup.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT));

        setContentView(frameLayout);

        vidSurface = new SurfaceView(MyDreamService.this);
        vidHolder = vidSurface.getHolder();
        vidHolder.addCallback(MyDreamService.this);
        frameLayout.addView(vidSurface,
            new FrameLayout.LayoutParams(
                ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));

        view = new View(this);
        view.setLayoutParams(new ViewGroup.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT));
        frameLayout.addView(view);


        ObjectAnimator fadeIn = ObjectAnimator.ofFloat(frameLayout, "alpha", .3f, 1f);
        fadeIn.setDuration(2000);

        final AnimatorSet mAnimationSet = new AnimatorSet();

        mAnimationSet.play(fadeIn);

        mAnimationSet.addListener(new AnimatorListenerAdapter() {
            @Override
            public void onAnimationEnd(Animator animation) {
                super.onAnimationEnd(animation);
                if(mediaPlayer != null) {
                    mediaPlayer.start();
                }
                if(view != null) {
                    view.setAlpha(0f);
                }
            }
        });
        mAnimationSet.start();

    }

    @Override
    public void onDreamingStopped() {
        super.onDreamingStopped();

        if(mediaPlayer != null) {
            if(mediaPlayer.isPlaying()) {
                mediaPlayer.stop();
            }
        }
    }

    @Override
    public void onDetachedFromWindow() {
        super.onDetachedFromWindow();
        if(mediaPlayer != null) {
            if(mediaPlayer.isPlaying()) {
                mediaPlayer.stop();
            }
            mediaPlayer.reset();
            mediaPlayer.release();
            mediaPlayer = null;
        }
    }

    @Override
    public void surfaceCreated(SurfaceHolder holder) {
        try {
            mediaPlayer = MediaPlayer.create(MyDreamService.this, R.raw.voice_activated_corgi);
            mediaPlayer.setLooping(true);
            mediaPlayer.setDisplay(vidHolder);
            mediaPlayer.setOnPreparedListener(MyDreamService.this);
        } catch(Exception e) {
            e.printStackTrace();
        }
    }

    @Override
    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
        vidHolder = holder;
    }

    @Override
    public void surfaceDestroyed(SurfaceHolder holder) {
    }

    @Override
    public void onPrepared(MediaPlayer mp) {

    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28566221

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档