将onDraw(视图视图)与SurfaceView相关联

时间:2015-05-27 20:01:59

标签: java android

对于初学者来说,我个人总是发现很难理解代码会自动与手动相比发生什么。我特别遇到麻烦的一个领域是了解android开发中android.view.View类的onDraw(Canvas canvas)方法。我有一些没有错误的代码但是当它运行时我的onDraw(Canvas画布)似乎被忽略了。我不认为编译器知道我想要绘制的地方,我不知道如何让它知道。这是我的一些代码(仅添加相关代码。如果您需要更多评论,我会相应添加更多代码):

主要活动

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

GFX

public class GFX extends Activity{
    MyBringBack ourView;
    @Override
    protected void onCreate(Bundle savedInstanceCreate){
        super.onCreate(savedInstanceCreate);
        ourView = new MyBringBack(this);
        setContentView(ourView);
    }
}

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上的these教程。

如何指定要绘制的位置?

2 个答案:

答案 0 :(得分:0)

所以我最终发现自己只是添加了setContentView(new MyBringBack(this));这个技巧

答案 1 :(得分:0)

我不确定你在这做什么。您不应该在另一个活动中实例化一个活动。你能详细说明吗?

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

 Canvas.save()
完成绘图后

。另外,如果你想确保调用ondraw,你需要做

someView.invalidate()

这将告诉视图调用

onMeasure and onDraw