Surfaceview:(绘画图形、滚动歌词、播放视频等)

SurfaceView主要用于被动更新,适合频繁刷新场景,如视频播放、滚动歌词显示等。与View不同,SurfaceView在子线程中刷新,且内置双缓冲机制。它能实现的功能包括播放视频、绘制图形、作为画板使用以及歌词滚动。实现视频播放需设置SurfaceHolder.Callback接口,而绘制图形需使用画笔和画布,并确保正确关闭。
摘要由CSDN通过智能技术生成

Surfaceview的特点以及和View的区别:

  1. View 主要适用于主动更新的情况,而 surfaceView 主要适用于被动更新,例如频繁的刷新。
  2. View 在主线程中对画面进行刷新,而 surfaceView 通常会通过一个子线程来进行页面的刷新
  3. View 在绘图时没有使用双缓冲机制,而 surfaceView 在底层实现机制上就已经实现了双缓冲机制。
  4. 特点:频繁的更新UI,原因是双缓冲机制

功能:

  • 1 播放视频
  • 2.绘制滚动的图形:画圆 画线 画矩形 画图片 画文字
  • 3.画板功能:截图之后可以涂鸦
  • 4.歌词滚动

播放视频:
添加接口回调,能够获取surfaceview的生命周期(this不是上下文对象)
surfaceHolder.addCallback(this);
implements SurfaceHolder.Callback会重写三个方法

public class SurfaceViewActivity extends AppCompatActivity implements SurfaceHolder.Callback {
    SurfaceView surfaceView;//控件 一个Surfaceview 对应一个surfaceHolder
    SurfaceHolder surfaceHolder;//持有者,不能直接操作SurfaceView,通过他的SurfaceHolder来操作,
    MediaPlayer mediaPlayer=new MediaPlayer();//媒体资源对象

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

    }

    private void initView() {
        surfaceView=findViewById(R.id.surface);
        surfaceHolder=surfaceView.getHolder();
        surfaceHolder.addCallback(this);//添加接口回调,能够获取surfaceview的生命周期

    }
	//初始化mediaplayer
    private void initPalyer() {
        try {
            mediaPlayer.setDataSource("http://uvideo.spriteapp.cn/video/2019/0512/56488d0a-7465-11e9-b91b-1866daeb0df1_wpd.mp4");
            mediaPlayer.prepareAsync();
            mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
                @Override
                public void onPrepared(MediaPlayer mp) {
                    mediaPlayer.start();
                }
            });
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    //生命周期:创建 将mediaplayer和surfaceholder绑定一起,
    @Override
    public void surfaceCreated(SurfaceHolder holder) {
        mediaPlayer.setDisplay(surfaceHolder);//将mediapler显示在surfaceview

    }
    //改变
    @Override
    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {

    }
    //销毁
    @Override
    public void surfaceDestroyed(Surf
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值