0

カスタム Android SurfaceView を実装しましたが、コールバックを追加するとエラーが発生します。

クラスのコードは次のSurfaceViewとおりです。

public class AndroidSurface extends SurfaceView {

    public SurfaceHolder holder;

    public AndroidSurface(Context context, AttributeSet attrs) {
        super(context, attrs);

        holder = getHolder();
        holder.addCallback(new SurfaceHolder.Callback() {

            public void surfaceChanged(SurfaceHolder holder, int format,
                    int width, int height) {
                // TODO Auto-generated method stub

            }

            public void surfaceCreated(SurfaceHolder holder) {
                // TODO Auto-generated method stub

            }

            public void surfaceDestroyed(SurfaceHolder holder) {
                // TODO Auto-generated method stub

            }


        });
    }
}

layout.xmlたとえば、このビューを に追加すると、次のようになります。

<com.app.AndroidSurface
        android:id="@+id/surfaceView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_above="@+id/rightBtn"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"
        android:layout_below="@+id/textView1" />

Graphical Layoutshow in : インスタンス化に失敗したときにエラーが発生します。(プラグイン: com.android.ide.eclipse.adt) このプロジェクトを実行すると、例外が発生します。LogCat で表示すると、Java Null Point Exception が表示されます。

奇妙なことに、削除してholder.addCallback(new SurfaceHolder.Callback() {...もエラーは発生しません。

これも奇妙に見えます。これを修正する方法を教えてください。

@ Edited : I の場合getHolder、それが返されないsurface holderため、ホルダーが null であるため、問題はありません。理由はわかりません。

ありがとう :)

4

1 に答える 1

0

コンテキストを確認し、ライフサイクルに関して正しい順序で物事を行っていることを確認する必要があります。この投稿を確認してくださいsurfaceView.getHolder が SurfaceHolder を返さない

于 2012-08-06T18:20:40.857 に答える