我正在开发一个非常简单的自定义视图,我的视图只是扩展视图,并且有一个绘制方法
public class MyView extends View ;
public MyView(Context context, AttributeSet attrs) {
super(context, attrs);
System.out.println("CONTEXT!!! "+context);
}
@Override
public void draw (Canvas canvas){
...
}
XML定义是:
<com.mycode.MyView
android:id="@+id/overlay"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
Android正确尝试实例化该类,并按预期调用绘制...不幸的是,在draw方法中,上下文为null。所以我在构造函数中放置了system.out.println,以便在实例化时看到上下文不为null ...但该行永远不会被命中...那么是怎么回事?我是否在某个生命周期中,我不明白Android在完成创建上下文之前可以调用draw?在这种情况下,如何使Context成为空的东西呢?
我不明白如何将视图实例化/膨胀到调用draw方法的点,但没有上下文。
任何帮助都将不胜感激。
答案 0 :(得分:3)
View
有4个构造函数(从API 21开始)。该框架可能正在调用构造函数的View(android.content.Context, android.util.AttributeSet, int)
版本,使您无法看到Log语句。
我不知道你是如何得到Context
的引用,但我的赌注是你在未被调用的构造函数中设置类似this.context = context
的东西。请改用View.getContext()
内的onDraw()
。