Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/230.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(视图)与SurfaceView关联_Java_Android - Fatal编程技术网

Java 将onDraw(视图)与SurfaceView关联

Java 将onDraw(视图)与SurfaceView关联,java,android,Java,Android,首先,就我个人而言,我总是很难理解自动编码和手动编码的区别。我遇到的一个问题是理解android开发中android.view.view类的onDraw(Canvas Canvas)方法。我有一些代码没有错误,但当它运行我的onDraw(画布)时,它似乎被忽略了。我不认为编译器知道我想画在哪里,我也不知道如何让它知道。以下是我的一些代码(仅添加相关代码。如果您需要更多注释,我将相应地添加更多): 主要活动 protected void onCreate(Bundle savedInstanceS

首先,就我个人而言,我总是很难理解自动编码和手动编码的区别。我遇到的一个问题是理解android开发中android.view.view类的onDraw(Canvas Canvas)方法。我有一些代码没有错误,但当它运行我的onDraw(画布)时,它似乎被忽略了。我不认为编译器知道我想画在哪里,我也不知道如何让它知道。以下是我的一些代码(仅添加相关代码。如果您需要更多注释,我将相应地添加更多):

主要活动

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    backGround = (RelativeLayout) findViewById(R.id.bG);
    GFX screen = new GFX();
}
GFX

MyBringBack

public class MyBringBack extends View {

    Paint paint = new Paint();

    public MyBringBack(Context context){
        super(context);

    }

    @Override
    protected void onDraw(Canvas canvas){
        super.onDraw(canvas);
        paint.setColor(Color.BLACK);
        paint.setStrokeWidth(3);
        canvas.drawRect(30, 30, 80, 80, paint);

    }

}
我一直在关注youtube上的教程


如何指定要绘制的位置?

因此我最终发现自己只是添加了
setContentView(新的MyBringBack(this))起作用了

我不知道你在这里干什么。您不应该在另一个活动中实例化一个活动。你能详细说明一下吗

至于为什么onDraw不起作用。可能是因为你应该打电话

 Canvas.save()
画完之后。此外,如果要确保调用ondraw,您需要执行以下操作

someView.invalidate()
这将告诉视图调用

onMeasure and onDraw
onMeasure and onDraw