如何制作TextureView的动画? [英] How to animate TextureView?

查看:617
本文介绍了如何制作TextureView的动画?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试在TextureView中淡入淡出,但由于某种原因它没有动画.它只是简单地出现在视频中,根本没有消失,我真的不知道为什么,这是因为经过一些研究,我发现TextureView可以正常进行动画处理.

I am trying to fade in a TextureView but for some reason its not animating. It just simply pops in the video, no fade at all and i dont really know why that is because after some research i have found that TextureView can be animated normally.

这是我的代码,我希望你们能给我一个正确方向的指针.

Here is my code, i hope you guys can give me a pointer in the right direction.

PS,我遗漏了所有与Textureview和动画无关的无关代码.

PS, i have left out all irrelevant code that does not concern itself with the textureview and the animation.

public class MainActivity extends AppCompatActivity implements MediaPlayer.OnPreparedListener, MediaPlayer.OnCompletionListener
{
    private static final String TAG = MainActivity.class.getSimpleName();

    private MediaPlayer mediaPlayer1;
    private ArrayList<Uri> videoUris = new ArrayList<>();
    private int current_video_index = 0;

    private TextureView textureView;

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        textureView = (TextureView) findViewById(R.id.textureView);

        mediaPlayer1 = new MediaPlayer();
        mediaPlayer1.setAudioStreamType(AudioManager.STREAM_MUSIC);
        mediaPlayer1.setOnPreparedListener(this);
        mediaPlayer1.setOnCompletionListener(this);

        initVideoUris();
        initNewVideo();
    }

    private void startVideo(final Uri uri)
    {
        textureView.setSurfaceTextureListener(new TextureView.SurfaceTextureListener()
        {
            @Override
            public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height)
            {
                try {
                    mediaPlayer1.setDataSource(MainActivity.this, uri);
                    mediaPlayer1.setSurface(new Surface(surface));
                    mediaPlayer1.setOnCompletionListener(MainActivity.this);
                    mediaPlayer1.setOnPreparedListener(MainActivity.this);
                    mediaPlayer1.setAudioStreamType(AudioManager.STREAM_MUSIC);

                    mediaPlayer1.prepareAsync();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

            @Override
            public void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, int height)
            {

            }

            @Override
            public boolean onSurfaceTextureDestroyed(SurfaceTexture surface)
            {
                return false;
            }

            @Override
            public void onSurfaceTextureUpdated(SurfaceTexture surface)
            {

            }
        });
    }

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

    @Override
    public void onCompletion(MediaPlayer mp)
    {
        if (!moreVideosAvailable())
        {
            finish();
        }
    }

    private boolean moreVideosAvailable()
    {
        return current_video_index < videoUris.size();
    }

    private void fadeInView(View view)
    {
        view.setAlpha(0f);
        view.setVisibility(View.VISIBLE);
        view.animate().alpha(1f).setDuration(2000).setListener(null).start();
    }
}

推荐答案

我通过制作一个使用TextureView作为显示视频表面的videoPlayerFragment来解决了这个问题.然后只需为整个片段而不是textureView设置动画即可.

I solved it by making a videoPlayerFragment that uses TextureView as the surface for displaying the video. Then simply animate the whole fragment instead of the textureView.

这篇关于如何制作TextureView的动画?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆