1

メインのアクティビティで TextureView を使用する例をたくさん見てきましたが、フラグメントに入れようとしています。

可能な限り最も単純な例を作成し、その onCreateView が呼び出され、onActivityCreated も呼び出されていますが、TextureView を返した後に onSurfaceTextureAvailable が呼び出されていません。

何が欠けていますか?

ありがとうG

public class FullscreenActivity extends Activity {

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

public class TextureViewFragment  extends Fragment
implements TextureView.SurfaceTextureListener {

    private TextureView         mTextureView;

     @Override
     public void onActivityCreated(Bundle savedInstanceState) {
          super.onActivityCreated(savedInstanceState);
     }

     @Override
     public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

          mTextureView = new TextureView(getActivity());
          mTextureView.setSurfaceTextureListener(this);
          mTextureView.setOpaque(false);    
         return mTextureView;
    }

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

    @Override
    public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) {
         // TODO Auto-generated method stub
        return false;
    }

    @Override
    public void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width,
        int height) {
         // TODO Auto-generated method stub
     }

    @Override
    public void onSurfaceTextureUpdated(SurfaceTexture surface) {
       // TODO Auto-generated method stub   
    }
}


activity_fullscreen.xml:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
             xmlns:tools="http://schemas.android.com/tools"
             android:layout_width="match_parent"
             android:layout_height="match_parent"
             android:background="#0099cc"
             tools:context=".FullscreenActivity" >

     <fragment class="com.example.test.TextureViewFragment"
               android:id="@+id/graphTextureView"
               android:layout_width="0px" android:layout_height="match_parent" />
 </FrameLayout>
4

3 に答える 3

2

これは、 がTextureView0 以外のサイズで、表示可能でなければならないためです。コメントに基づいて、layout_widthに設定されました0px。それをゼロ以外の値に変更します。

(古い質問ですが、後世のために回答を投稿しています)

于 2015-10-02T15:23:11.547 に答える
1

AndroidManifest.xml に「android:hardwareAccelerated=true」を追加する必要があります。

TextureView にはハードウェア アクセラレーションが必要です。

于 2015-10-12T08:45:42.847 に答える
0

あなたTextureViewはレイアウトxmlファイルにあるはずです。を使用してインスタンス化する代わりに、次のnewような方法で取得する必要があります。

View view = inflater.inflate(R.layout.layout_video, container, false);
mTextureView = (TextureView) view.findViewById(R.id.video_texture_view);

次に、layout_video.xmlTextureViewファイルで、id video_texture_viewが必要です

于 2016-08-31T18:29:53.250 に答える