将多个元素绘制到画布

时间:2015-10-17 13:34:52

标签: java android canvas

我成功地在画布上添加了一个椭圆形状,但是现在我想再添加两个矩形,但由于某些原因它们不会被添加到画布中。椭圆形是移动的球,矩形是静态元素,用于"背景"。一个矩形应该作为地板,另一个矩形作为移动物体,球的障碍物。

我试图在图像中将其可视化:

Result

这是代码,mBack和mObs是我试图添加的矩形。

AnimatedView animatedView = null;
ShapeDrawable mDrawable = new ShapeDrawable();
ShapeDrawable mBack = new ShapeDrawable();
ShapeDrawable mJump = new ShapeDrawable();
public static int x;
public static int y;
public class AnimatedView extends ImageView {

    static final int width = 50;
    static final int height = 50;

    public AnimatedView(Context context) {
        super(context);
        // TODO Auto-generated constructor stub

        mDrawable = new ShapeDrawable(new OvalShape());
        mBack = new ShapeDrawable(new RectShape());
        mObs = new ShapeDrawable(new RectShape());
        mDrawable.getPaint().setColor(0xffffAC23);
        //mDrawable.setBounds(x, y, x + width, y + height);
        mDrawable.setBounds(y, x, y + width, x + height);
        mBack.setBounds(100, 100, 100, 100);
        mObs.setBounds(120,120,120,120);

    }

    @Override
    protected void onDraw(Canvas canvas) {

        mDrawable.setBounds(y, x, y + width, x + height);
        mBack.draw(canvas);
        mDrawable.draw(canvas);
        invalidate();
    }
}

将添加mDrawable,但mBack或mObs不会。将setBounds添加到onDraw也不会改变一件事。

2 个答案:

答案 0 :(得分:1)

你设置Bounds的方式是错误的。 setBounds方法的定义如下:

setBounds(int left, int top, int right, int bottom)

对于您将其设置为

的两个矩形
mBack.setBounds(100, 100, 100, 100);
mObs.setBounds(120,120,120,120);

这意味着左右角相同,顶部和底部相同,因此您看不到矩形。

设置这样的东西然后你会看到你的矩形

mBack.setBounds(100, 100, 300, 400);

在onDraw方法中对两个矩形形状调用draw方法。

答案 1 :(得分:0)

似乎问题在于,对于mBack,你将边界定义为零像素(起始端以(100,100)结束),对于mObs也是如此,但为此你也没有调用绘图。