1

现在我正在尝试测试 SurfaceView。它显示在我的预览中。它以我的自定义 SurfaceView ('RollView') 的名称显示灰色背景。每次我尝试测试它。它只是立即崩溃。当我删除 com.hovanky.roll.RollView xml 标签时,它可以工作。但我失去了我的表面观点。我究竟做错了什么?

在 xml 中,我放入了我的自定义 SurfaceView

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
         android:layout_width="match_parent"
         android:layout_height="match_parent">


<com.hovanky.roll.RollView
        android:id="@+id/rollview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>


<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
            android:orientation="vertical"
            android:layout_width="match_parent"
            android:layout_height="match_parent">

</RelativeLayout>
</FrameLayout>

在我的活动中,这扩展了活动。我给我的 SurfaceView 提供句柄

 @Override
 public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    mRollView = (RollView) findViewById(R.id.rollview);

然后,我绘制了我的自定义 SurfaceView 的骨架。

 class RollView extends SurfaceView implements SurfaceHolder.Callback {
 private SurfaceHolder holder;

 public RollView(Context context) {
    super(context);
    holder= getHolder();
    holder.addCallback(this);
}


@Override
public void surfaceCreated(SurfaceHolder holder) {
}

@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
}

@Override
public void surfaceDestroyed(SurfaceHolder holder) {
}
4

1 回答 1

1

将您的 RollView 类更改为:

    class RollView extends SurfaceView implements SurfaceHolder.Callback {
     private SurfaceHolder holder;

     public RollView(Context context) {
        super(context);
        holder= getHolder();
        holder.addCallback(this);
    }

    public RollView(Context context, AttributeSet attrs) {
        super(context, attrs);
        // TODO Auto-generated constructor stub
    }
   //your code here...
于 2013-01-04T16:45:07.283 回答