在我问我是否应该为我的项目使用XML或View类之后,我告诉我,我应该尽一切可能使用XML并使用其他类。你告诉我,XML无法实现动画Sprite,所以我想制作一个View Class。我得到了谷歌“LayoutInflater”的提示,我做了。
关于inflaters的信息不多,所以我访问了android的开发人员数据库,并试图找出它是如何工作的。
据我所知,你必须在主游戏活动的onCreate方法中加入一些东西(setContentView必须是mainXML)。
所以现在我在mainXML中创建了一个LinearLayout并将其命名为“container”,并使其成为名为“parent”的ViewGroup。
现在我已经创建了一个全局变量“私有视图视图”并编写了这一行:
view = LayoutInflater.from(getBaseContext()).inflate(new ViewClass(this),
null);
现在的问题是,你不能给这样的课程充气,我认为我这样做的事情是错误的。
我是否有任何提示和技巧让我能够在mainXML中使用LinearLayout并且能够使我的View类中的内容出现在其中?
编辑:
让它无故障地工作,但如果我现在开始游戏就没有任何反应。
如果您有任何解决方案,请使用以下代码:
super.onCreate(savedInstanceState);
// inflate mainXML->
View mainView = getLayoutInflater().inflate(R.layout.activity_game, null);
// find container->
LinearLayout container = (LinearLayout) mainView.findViewById(R.id.container);
// initialize your custom view->
view = new GameLayout(this);
// add your custom view to container->
container.addView(view);
setContentView(R.layout.activity_game);
我的GameLayout:
public GameLayout(Context context)
{
super(context);
}
@Override
protected void onDraw(Canvas canvas)
{
canvas.drawColor(Color.BLACK);
}
答案 0 :(得分:2)
有两种方法可以解决这个问题。我会告诉你其中一个。在致电onCreate(Bundle)
之前,请在setContentView(...)
中执行以下操作:
// inflate mainXML
View mainView = getLayoutInflater().inflate(R.layout.mainXML, null);
// find container
LinearLayout container = (LinearLayout) mainView.findViewById(R.id.container);
// initialize your custom view
view = new ViewClass(this);
// add your custom view to container
container.addView(view);
最后:
setContentView(mainView);
或者,您可以将自定义视图放在mainXML中:
<your.package.name.ViewClass
android:id="@+id/myCustomView"
android:layout_width="match_parent"
android:layout_height="match_parent"
.... />