Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/194.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 自定义视图类';onDraw不是';t由Invalidate调用_Java_Android_View_Ondraw_Android View Invalidate - Fatal编程技术网

Java 自定义视图类';onDraw不是';t由Invalidate调用

Java 自定义视图类';onDraw不是';t由Invalidate调用,java,android,view,ondraw,android-view-invalidate,Java,Android,View,Ondraw,Android View Invalidate,屏幕是白色的&onDraw-in中的System.out.println()从未调用 这是我的activity_main.xml <foo.packagename.MyView android:id="@+id/myView" android:layout_width="fill_parent" android:layout_height="fill_parent"/> 主要活动: public class MainActivity extends AppC

屏幕是白色的&onDraw-in中的System.out.println()从未调用

这是我的activity_main.xml

<foo.packagename.MyView
    android:id="@+id/myView"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"/>
主要活动:

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        System.out.println("This line is called");

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        View myView = findViewById(R.id.myView);
    }
}
invalidate()
不会导致直接调用
onDraw()
。它只是告诉系统需要在下一个绘图帧上重新绘制视图。否则,在下一个绘图框上,系统可以使用先前绘制的内容,因为没有任何更改。换句话说,您的
invalidate()
调用和最终的
onDraw()
调用是异步的


此外,在构造函数中放置无限
while
循环将导致UI线程永远不会执行超过该点的代码,因此系统甚至永远不会完成一次布局过程,也永远不会绘制一次视图。不用说,不要这样做。

去掉构造函数中的
循环。这就解决了它。我还是不明白问题出在哪里。哦,我刚才才注意到你一定是在我回复时改变了你的评论。是的,下面的答案解释了这一点。
public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        System.out.println("This line is called");

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        View myView = findViewById(R.id.myView);
    }
}