从“活动”传递资源id以初始化自定义ViewGroup



这是我上一个问题的后续,@pskink建议我实现自定义ViewGroup,以绘制我需要的内容。我成功地制作了一个使用硬编码值的原型。我想把它移到更高的级别,在那里我可以从"活动"传递初始化参数。我需要传递一个资源id并打开一个要在onPaint方法中使用的图像。

这就是活动。我可以在那里获得ViewGroup实例,但它已经实例化,所以在其构造函数中传递资源id是没有意义的。我尝试使用setter,但我需要一个Context来从资源中初始化Drawable。

protected void onCreate(Bundle state) {
    super.onCreate(state);
    setContentView(R.layout.activity_puzzle);
    hiddenPicture = (TileGroupLayout) findViewById(R.id.hidddenPictureArea);
    hiddenPicture.setPictureResource(R.drawable.pic_cute_girl);

ViewGroup的setter不像构造函数那样具有上下文。

public void setPictureResource(int resourceId) {
    int pictureResource = resourceId;
    mCustomImage = context.getResources().getDrawable(R.drawable.pic_cute_girl);
    pictureRect = mCustomImage.getBounds();
}

如何摆脱这个问题?在绘制ViewGroup之前,我需要传递初始化参数。活动有许多onXY()方法要重写,但没有类似的ViewGroup方法。它的生命周期是什么?

ViewGroup类中,只需从该类中的任何位置调用getContext()即可
编辑
除了从ViewGroup类获取上下文之外,您实际上不需要调用getContext().getResources(),而是应该直接调用getResources()

最新更新