2013年10月19日土曜日

TextureViewを使ってみた

SurfaceViewと同じような感じで使えると伺いましたので、使ってみた。

隅っこに円を描くだけのTextureViewを作ってみました。
public class SingleCircleTextureView extends TextureView implements SurfaceTextureListener
で宣言して、Runnableはメンバ変数として作成しました。

2013/10/30追記ここから
考察が足りてませんでした。まことに申し訳ありません。
アニメーションを作成している際にwindowの状態が変わる、ないしActivityなどを閉じた場合に、
エラーとしてcall to OpenGL ES API with no current context (logged once per thread)が表示されます。
どうやったらこのエラーがとれるのか悪戦苦闘中です。
試したこととしては、HandlerThreadで別looperとしてpostするなどです。

looperをぶつっと切ってもテストアプリ上では実害は見受けられないのですが見過ごせません。
がんばって調査します。

追記ここまで

以下は誤った内容だと思うので、ご注意ください。実際に動かしてみるとよくわかります。

SurfaceViewと異なる点。
・自前でスレッド管理しない。
RunnableはTextureViewクラスのメソッドのpost(Runnable())を使う。
自前でやってるとログでさわんなとopenGL(ES?)さんから怒られる。
call to OpenGL ES API with no current context (logged once per thread)

・lockcanvasをなどする場合は、TextureViewのlockcanvasを使う。
オートコンプリートで出てくるよ。(デフォルトだと左ctrl+shift)

・実行状態はonSurfaceTextureAvailable。
このメソッドでRunnableをpost()する。
ActivityとかFragmentとかTextureViewを継承したクラスでログを打ち込みまくった結果、
onWindowFocuschangedが終わってからTextureViewの処理に入った。
ログうつのだるかったっす。

destroyはMyTextureViewのメンバ変数をnullしたりcallbackをリムーブしたり。
public void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width,int height)

public void onSurfaceTextureUpdated(SurfaceTexture surface) {
は、どう使うのかはまだ何もしてません。

0 件のコメント:

コメントを投稿