TextureRenderView.java 2.29 KB

package com.wd.player.widget;

import android.content.Context;
import android.graphics.SurfaceTexture;
import android.util.AttributeSet;
import android.view.Surface;
import android.view.TextureView;
import android.view.View;

import com.wd.base.log.Logger;

/**
 * TextureRenderView
 * 
 * @author wd
 */
public class TextureRenderView extends TextureView implements IRenderView, TextureView.SurfaceTextureListener {

    private IRenderCallback mRenderCallback;

    private Surface mSurface;

    /**
     * 构造器
     * 
     * @param context
     */
    public TextureRenderView(Context context) {
        super(context);
        init(context);
    }

    /**
     * 构造器
     * 
     * @param context
     * @param attrs
     */
    public TextureRenderView(Context context, AttributeSet attrs) {
        super(context, attrs);
        init(context);
    }

    /**
     * 构造器
     * 
     * @param context
     * @param attrs
     * @param defStyleAttr
     */
    public TextureRenderView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init(context);
    }

    private void init(Context context) {
        Logger.t("AliLivePlayerView").e( "init: TextureRenderView");
        setSurfaceTextureListener(this);
    }

    @Override
    public void addRenderCallback(IRenderCallback renderCallback) {
        this.mRenderCallback = renderCallback;
    }

    @Override
    public View getView() {
        return this;
    }

    @Override
    public void onSurfaceTextureAvailable(SurfaceTexture surfaceTexture, int i, int i1) {
        mSurface = new Surface(surfaceTexture);
        if (mRenderCallback != null) {
            mRenderCallback.onSurfaceCreate(mSurface);
        }
    }

    @Override
    public void onSurfaceTextureSizeChanged(SurfaceTexture surfaceTexture, int width, int height) {
        if (mRenderCallback != null) {
            mRenderCallback.onSurfaceChanged(width, height);
        }
    }

    @Override
    public boolean onSurfaceTextureDestroyed(SurfaceTexture surfaceTexture) {
        mSurface.release();
        if (mRenderCallback != null) {
            mRenderCallback.onSurfaceDestroyed();
        }
        return false;
    }

    @Override
    public void onSurfaceTextureUpdated(SurfaceTexture surfaceTexture) {

    }
}