Java 如何设置矩形以在画布中反弹时保持其大小?

Java 如何设置矩形以在画布中反弹时保持其大小?,java,android,canvas,Java,Android,Canvas,问题是,当矩形在画布中来回移动时,我想保留它的大小。这是myview.java代码: public class MyView extends View { private int xMin = 0; private int xMax; private int yMin = 0; private int yMax; private float rectX =130; private float rectY =180; private flo

问题是,当矩形在画布中来回移动时,我想保留它的大小。这是myview.java代码:

public class MyView extends View {

    private int xMin = 0;
    private int xMax;
    private int yMin = 0;
    private int yMax;
    private float rectX =130;
    private float rectY =180;
    private float rectSpeedX = 5;
    private float rectSpeedY = 3;
    private RectF RectBounds;
    private Paint paint;

    public MyView(Context context) {
        super(context);
        RectBounds = new RectF();
        paint = new Paint();
    }
    @Override
    public void onDraw(Canvas canvas) {
        RectBounds.set(rectX, rectX, rectY, rectY);
        paint.setColor(Color.BLACK);
        paint.setStrokeWidth(3);
        canvas.drawRect(RectBounds,paint);
        paint.setStrokeWidth(0);
        paint.setColor(Color.CYAN);
        canvas.drawRect(RectBounds,paint);
        paint.setColor(Color.YELLOW);
        canvas.drawRect(RectBounds,paint);
        start();
        invalidate();
    }
    private void start() {
        rectX += rectSpeedX;
        rectY += rectSpeedY;
        if (rectX> xMax) {
            rectSpeedX = -rectSpeedX;
            rectX = xMax;
        } else if (rectX < xMin) {
            rectSpeedX = -rectSpeedX;
            rectX = xMin;
        }
        if (rectY > yMax) {
            rectSpeedY = -rectSpeedY;
            rectY = yMax;
        } else if (rectY  < yMin) {
            rectSpeedY = -rectSpeedY;
            rectY = yMin;
        }
    }
    @Override
    public void onSizeChanged(int w, int h, int oldW, int oldH) {
        xMax = w-1;
        yMax = h-1;
    }
}
公共类MyView扩展了视图{
私有int xMin=0;
私有int-xMax;
私有int-yMin=0;
私人国际货币基金组织;
私有浮动rectX=130;
私有浮点数y=180;
专用浮点数x=5;
私人浮动利率=3;
私有RectF-rectfounds;
私人油漆;
公共MyView(上下文){
超级(上下文);
RectBounds=新的RectF();
油漆=新油漆();
}
@凌驾
公共空白onDraw(画布){
集合(rectX,rectX,rectY,rectY);
油漆。设置颜色(颜色。黑色);
油漆。设置行程宽度(3);
画布.drawRect(矩形边界,绘制);
油漆。设置行程宽度(0);
油漆.setColor(颜色为青色);
画布.drawRect(矩形边界,绘制);
油漆。设置颜色(颜色。黄色);
画布.drawRect(矩形边界,绘制);
start();
使无效();
}
私有void start(){
rectX+=rectSpeedX;
rectY+=rectY;
如果(rectX>xMax){
rectSpeedX=-rectSpeedX;
rectX=xMax;
}else if(rectXyMax){
rectspited=-rectspited;
rectY=yMax;
}else if(rectY

另外,如果你有任何建议,使我的代码更短。我很高兴。谢谢你。

你可以用这样的东西:

RectBounds.set(rectX, rectX + rectWidth, rectY, rectY + rectHeight);

此外,对象名称不应使用大写字母(RectBounds->RectBounds),或者在这种特定情况下,只应将其命名为“rect”,因为它是一个RectF。

好的,我使用“RectBounds.set(rectX,rectX+rectWidth,rectY,rectY+recthheight);”我将在开始方法中更改什么?您必须更改底部和右侧的边界检测,因为您的矩形具有宽度和高度。您还必须在顶部定义两个新变量:private int rectWidth=anynumber;和private int rectHeight=anynumber;我想我的空白开始是一团糟,因为矩形正在移动,而改变形状LoL