无法使用画布绘制两个类

时间:2012-11-01 03:12:45

标签: java android android-canvas

我正在为Android做第一场比赛。

我想做一个非常简单的事情,那就是有一个背景和一个将在其中“生成”的球。

所以我制作了我的GameView:

package com.example.newarkanoid;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.MotionEvent;
import android.view.View;

public class Tela extends View {
    Paint paint;
    int x,y;
    int lastx,lasty;
    Bola bola;

    public Tela(Context context, Bola BOLA) {
        super(context);
        paint = new Paint();
        x=0;lastx=0;
        y=0;lasty=0;
        bola = BOLA;
        bola.paint.setColor(Color.BLACK);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        paint.setColor(Color.WHITE);
        canvas.drawPaint(paint);
        bola.invalidate();
    }

    public boolean onTouchEvent(MotionEvent event) {
        x = (int)event.getX();
        y = (int)event.getY();
        if(lastx !=x || lasty !=y){
            lastx=x;
            lasty=y;
            bola.x = x;
            bola.y = y;
            bola.invalidate();
        }
    return false;
    }

}

好吧,上面是我的MainDisplay,现在我需要一个球:

package com.example.newarkanoid;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.View;

public class Bola extends View {
    Paint paint;
    float x,y,raio;

    public Bola(Context context, float x, float y, float raio) {
        super(context);
        this.x = x;
        this.y = y;
        this.raio = raio;
        paint = new Paint();
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        paint.setStyle(Paint.Style.FILL);
        canvas.drawCircle(x, y, raio, paint);
    }

}

所以,我确实喜欢这样,因为我的老师告诉我,你不必为衣服主显示器调用invalidate,你可以为你的球调用invalidate,所以我制作了我的球绘图代码,也是它的属性。

正如您在代码中看到的那样,当我点击触摸屏中的某个位置时,我的球x和y将变为点击位置,然后调用invalidate。

问题是,当我创建mainDisplay时,球甚至没有出现,所以我想知道,是否存在类似上下文问题的内容?为什么我的球不被吸引?

此外,这是我的MainActivity:

 @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Bola bola = new Bola(this,20,20,5);
        Tela t = new Tela(this,bola);

        setContentView(t);
    }

2 个答案:

答案 0 :(得分:0)

@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    paint.setColor(Color.WHITE);
    canvas.drawPaint(paint);
    bola.invalidate();
}
当bola无效时,bola会用它的画布绘制,不同的是Tela的画布。您可以使用draw方法

创建一个类,而不是扩展视图
public void draw(Canvas canvas) {
    paint.setStyle(Paint.Style.FILL);
    canvas.drawCircle(x, y, raio, paint);
}

并致电tela:

@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    paint.setColor(Color.WHITE);
    canvas.drawPaint(paint);
    bola.draw(canvas);
}

答案 1 :(得分:0)

使用bola.draw(画布);在你的onDraw()