zoukankan      html  css  js  c++  java
  • TextureView和SurfaceTexture之间的关系

    1.TextureView和SurfaceTexture

    (1)定义以及使用
    public class TextureView extends View.
    public class SurfaceTexture.
    从android源码类的定义可以看出TextureView是一个view.当TextureView执行完onAttachedToWindow时,它的SurfaceTexture才是有效可用的.
    所以SurfaceTextureListener接口用于让TextureView的使用着知道SurfaceTexture已经ready,这样可以把SurfaceTexture交给对应的内容源.
    (2)形象功能
    曾经在网上看到这样说:如果说TextureView是一幅画的话,那SurfaceTexture就是画布,真正渲染的载体是SurfaceTexture
    那么我的理解是view是一个显示,是否可以说成,TextureView是一个呈现,可比作为黑板,SurfaceTexture就是黑板的表层用来承载流显示的一个载体.

    2.代码演示

    package com.example.textureviewactivity;
    import java.io.IOException;
    import android.graphics.SurfaceTexture;
    import android.hardware.Camera;
    import android.os.Bundle;
    import android.app.Activity;
    import android.util.Log;
    import android.view.Menu;
    import android.view.TextureView;
    
    public class TextureViewActivity extends Activity implements TextureView.SurfaceTextureListener{
    
    private TextureView mTextureView;
    private Camera mCamara;
    private String tag = "TextureViewActivity";
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    mTextureView = new TextureView(this);
    Log.d(tag,"after new TextureView,before set listener");
    mTextureView.setSurfaceTextureListener(this);//设置监听
    Log.d(tag,"after set listener");
    setContentView(mTextureView);
    }
    
    public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height){
    Log.d(tag,"onSurfaceTextureAvailable surface: "+surface);
    mCamara = Camera.open();
    try{
    mCamara.setPreviewTexture(surface);
    mCamara.startPreview();
    }catch(IOException ioe){
    }
    }
    
    public void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, int height){
    }
    
    public boolean onSurfaceTextureDestroyed(SurfaceTexture surface){
    Log.d(tag,"onSurfaceTextureDestroyed");
    mCamara.stopPreview();
    mCamara.release();
    returntrue;
    }
    
    public void onSurfaceTextureUpdated(SurfaceTexture surface){
    }
    
    @Override
    public void onPause(){
    super.onPause();
    Log.d(tag,"onPause");
    }
    
    @Override
    public void onDestroy(){
    super.onDestroy();
    Log.d(tag,"onDestroy");
    }
    
    @Override
    publicboolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.activity_main, menu);
    returntrue;
    }

    测试结果:

    07-16 10:07:30.145 4672  4672 D TextureViewActivity: after new TextureView,before set listener
    07-16 10:07:30.145 4672  4672 D TextureViewActivity: after set listener
    //此处可以得出设置完监听后,且onAttachedToWindow后此处将会回调表明SurfaceTexture ready 有效.
    07-16 10:07:30.250 4672  4672 D TextureViewActivity: onSurfaceTextureAvailable surface:android.graphics.SurfaceTexture@9f2b3ff
    07-16 10:07:36.415 4672  4672 D TextureViewActivity: onPause
    07-16 10:07:36.545 4672  4672 D TextureViewActivity: onSurfaceTextureDestroyed
    07-16 10:07:36.897 4672  4672 D TextureViewActivity: onDestroy
    

     对应camera的使用权限可以在配置文件添加进去,此处不做过多说明.

  • 相关阅读:
    c++求最大公约数、最小公倍数
    五个简单的shell脚本
    微信小程序slot(一)
    小程序详解子传父
    小程序封装组件详解父传子
    小程序生命周期详解
    小程序之confirm-type改变键盘右下角的内容和input按钮详解
    小程序之按钮你不知道的v2
    小程序image图片缩小不变形
    小程序之navigator跳转方式
  • 原文地址:https://www.cnblogs.com/syyh2006/p/9318224.html
Copyright © 2011-2022 走看看