2013-02-15 41 views
0

以下设置不起作用,有人知道为什么(我似乎无法找到片段中自定义曲面视图的示例)。如何显示包含自定义SurfaceView的片段

我surfaceView类是目前只是空:

class MySurfaceView extends SurfaceView implements Runnable{ 

public MySurfaceView(Context context) { 
    super(context); 
    // TODO Auto-generated constructor stub 
} 

@Override 
public void run() { 
    // TODO Auto-generated method stub 

} 



} 

我对片段XML看起来是这样的:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/LinearLayout2" 
    android:layout_width="500dp" 
    android:layout_height="600dp" 
    android:layout_gravity="fill" 
    android:background="#000000" > 


    <Button 
     android:id="@+id/button2" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Button" /> 


    <com.example.android.fragments.MySurfaceView 
     android:id="@+id/surfaceview" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content"/> 


    </LinearLayout> 

然后在实际片段本身的OnCreateView我打电话:

return inflater.inflate(R.layout.article_view, container, false); 

任何想法,为什么这不会在一起?

这事做与XML,因为当我做

<SurfaceView 
    android:id="@+id/surfaceview" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"/> 

然后正常工作。

回答

0

答案很简单,如果你检查:

http://developer.android.com/guide/components/fragments.html#Creating

,你会看到,onCreateView你应该返回视图将被用来展示片段

@Override 
    public View onCreateView(String name , Context context , AttributeSet attrs) 
    { 
     // TODO Auto-generated method stub 
     return super.onCreateView(name , context , attrs); 
    } 

你应该返回查看所以基本上你应该回到那里你的

MySurfaceView 

//编辑

public MySurfaceView (Context context , AttributeSet attrs , int defStyle) 
    { 
     super(context , attrs , defStyle); 
     // TODO Auto-generated constructor stub 
    } 

    public MySurfaceView (Context context , AttributeSet attrs) 
    { 
     super(context , attrs); 
     // TODO Auto-generated constructor stub 
    } 

    public MySurfaceView (Context context) 
    { 
     super(context); 
    } 

尝试实施这一观点的所有3个构造

+0

我认为你的答案是不正确的,因为“要为你的片段绘制一个UI,你必须从这个方法返回一个视图,这是你的片段布局的根。 SurfaceView不是根视图,它只是XML文档中的一个组件,因为我也有一个按钮。所以这就是我正在做的“返回inflater.inflate(R.layout.article_view,容器,false);”我膨胀并返回包含SurfaceView的根视图。 – drlobo 2013-02-15 15:45:15

1

如果你想要的是显示您的自定义SurfaceView(“MySurfaceView”)的片段,然后只需做到以下几点:

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     return new MySurfaceView(getActivity()); 
    }