android新手在这里。
我的第一个游戏涉及一个自定义视图,它将在屏幕上绘制游戏板和一些记分牌。我需要知道有多少玩家才能获得记分板的数量,我需要在自定义视图的构造函数中知道这一点,以便按时初始化适当的变量。
我当前的实现是这样的,这是将变量放入自定义视图构造函数的正确方法吗?...
我从我的活动中实例化自定义视图,如下所示:
numPlayers=2;
setContentView(R.layout.gamescreen);
mBoardView = (BoardView) findViewById(R.id.board_view);
在自定义视图构造函数中:
public BoardView(Context context, AttributeSet attrs){
super(context, attrs);
vNumPlayers = ((GuappsXOMainGame)getContext()).getNumP();
这就是我现在的方式,它似乎运作得很好,但是在这个问题的答案中做一些事情会更好吗?
android:how to instantiate my custom view with attributeset constructor
答案 0 :(得分:4)
当自定义视图(或SurfaceView)是唯一的视图时(通常在游戏中),通过在setContentView()之前创建此视图的实例,可以很容易地传递诸如关卡,播放器,声音等参数。一个例子:
MyView myView = new MyView(level, players, soundOn);
setContentView(myView);
在您的情况下,在创建布局时会实例化您的自定义视图,因此您必须与活动对象进行通信以获取值。这也是可能的。我通过在调用setContentView(my_layout)之前在活动中设置静态变量然后在自定义视图的构造函数中执行此操作,只需说level = MyActivity.level
或许您已经在获取活动实例并调用公共方法或变量的方式。
在您提供的链接中,属性是“硬连线”到XML布局中。当我们可以简单地将值作为“最终”变量输入自定义视图类本身时,我没有看到它的优点。