尝试用对象填充屏幕

时间:2019-04-14 20:26:39

标签: java android

似乎我在理解课程时遇到问题。如果有人可以帮助,那就太好了。

我正在尝试用3个不同颜色的圆圈填充我的智能手机屏幕(Android)。 我的问题是,使用下面的代码,我只会得到一个(蓝色)圆圈。

我认为问题是y值设置不正确,并且3个圆圈相互隐藏(因此只能看到蓝色的圆圈)。但是当我记录3个圆形对象的y值时,y值似乎是正确的(200,500,800)

我在做什么错了?

谢谢您的帮助。

public class MainActivity extends Activity {

    public Circle circleR;
    public Circle circleG;
    public Circle circleB;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        circleR = new Circle(this, 200, 255, 0, 0);
        setContentView(circleR);

        circleG = new Circle(this, 500, 0, 255, 0);
        setContentView(circleG);

        circleB = new Circle(this, 800, 0, 0, 255);
        setContentView(circleB);

    }
}
public class Circle extends View {

    public Paint paint;
    public int y;

    public Circle(Context context,int y, int r, int g, int b){
        super(context);

        paint=new Paint();
        paint.setColor(Color.rgb(r,g,b));

        this.y=y;
    }

    @Override
    protected void onDraw(Canvas canvas){
        canvas.drawCircle(30, this.y,30, paint);
    }
}

1 个答案:

答案 0 :(得分:0)

问题在于多次设置内容视图。只有最后设置的视图(带有蓝色圆圈的视图)将可见。如果要同时显示多个圆圈,则应在一个视图中本地化的一张画布上绘制它们。我重新排列了您的代码,使其可以执行您想要的操作:

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        CirclesView circlesView = new CirclesView(this);
        setContentView(circlesView);
    }
}
public class CirclesView extends View {

    public Circle circleR;
    public Circle circleG;
    public Circle circleB;

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

        circleR = new Circle(200, 255, 0, 0);
        circleG = new Circle(500, 0, 255, 0);
        circleB = new Circle(800, 0, 0, 255);
    }

    @Override
    protected void onDraw(Canvas canvas){
        circleR.draw(canvas);
        circleG.draw(canvas);
        circleB.draw(canvas);
    }
}
public class Circle {

    public Paint paint;
    public int y;

    public Circle(int y, int r, int g, int b) {
        paint = new Paint();
        paint.setColor(Color.rgb(r,g,b));

        this.y=y;
    }

    public void draw(Canvas canvas) {
        canvas.drawCircle(30, this.y,30, paint);
    }
}

Circle知道如何在视图上提供的画布上绘制自己。