【问题标题】:Drawing a square in the center of a canvas在画布中心绘制一个正方形
【发布时间】:2014-05-31 20:23:52
【问题描述】:

我正在尝试弄清楚如何在 Android 中的 onDraw 方法中绘制一个 Square。

  1. 正方形必须位于画布的正中心 (不是屏幕)
  2. 正方形左右两侧的填充/间距应为 相等
  3. 正方形顶部和底部的填充/间距应该相等
  4. 正方形的大小应该比较大,大概是90%左右 画布宽度

这是我目前所拥有的。

//this.rect is an instance of Rect() which later gets called in the canvas.drawRect() method
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    super.onMeasure(widthMeasureSpec, heightMeasureSpec);

    int width = this.getMeasuredWidth();
    int height = this.getMeasuredHeight();
    int padding = (width / 10);

    this.size = width - padding;
    this.rect.set(padding,padding,size,size);

}

上面的代码绘制了正方形,但我不知道如何让它在画布中居中。我也愿意使用不涉及使用 Rect 的另一种技术。

我需要为此Rect() 设置哪些属性,以便canvas.drawRect(rect,paint) 直接在画布中心绘制矩形?

编辑: Terribly drawn example of what I want to achieve

【问题讨论】:

    标签: android canvas


    【解决方案1】:

    假设width 是画布的宽度,我猜你错过了两次减去填充。-

    this.size = width - padding * 2;
    

    编辑

    由于我们在这里讨论的是矩形,因此您需要对代码进行更多更改,并计算不同的顶部和左侧填充。-

    int width = this.getMeasuredWidth();
    int height = this.getMeasuredHeight();
    int paddingLeft = (width / 10);
    size = width - paddingLeft * 2;
    int paddingTop = (height - size) / 2;
    this.rect.set(paddingLeft,paddingTop,size,size);
    

    编辑 2

    也许一个更清晰的方法会开始计算你的正方形的大小。-

    size = width * 0.9f;
    int paddingLeft = (width - size) / 2;
    int paddingTop = (height - size) / 2;
    this.rect.set(paddingLeft,paddingTop,size,size);
    

    【讨论】:

    • 不起作用。画布本身不是正方形的。我的原始代码是一个扩展 View 的类。
    • 我明白了……那么你需要计算宽度和高度,让我更新我的答案……
    • 我已经用一张反映我想要实现的目标的图像更新了 OP。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-30
    • 1970-01-01
    • 2018-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多