Android:在自定义drawable中更改canvas / drawable的大小

时间:2014-09-26 16:09:04

标签: android canvas path size drawable

我试图实现一个自定义drawable,它应该具有一个speechbubble的形状。因此,我使用两个路径,一个绘制矩形,另一个绘制气泡的三角形。

我的课程如下:

public class SpeechBubbleView extends Drawable {

private Paint mBubblePaint;
private Paint mBubblePaint2;

private Path mRectPath;

private Path mBubblePath;

public SpeechBubbleView() { }

public void initPaint() {
    mBubblePaint = new Paint(Paint.ANTI_ALIAS_FLAG);
    mBubblePaint.setStyle(Paint.Style.FILL);
    mBubblePaint.setColor(Color.GREEN);

    mBubblePaint2 = new Paint(Paint.ANTI_ALIAS_FLAG);
    mBubblePaint2.setStyle(Paint.Style.FILL);
    mBubblePaint2.setColor(Color.RED);

    int width = getBounds().width();
    int height = getBounds().height();

    mRectPath = new Path();
    mRectPath.addRoundRect(new RectF(0, 0, width, height), 8, 8, Path.Direction.CW);
    mRectPath.close();

    mBubblePath = new Path();
    mBubblePath.moveTo(50, height);
    mBubblePath.lineTo(100, height + 50);
    mBubblePath.lineTo(150, height);
    mBubblePath.close();
}

@Override
public void draw(Canvas canvas) {
    if(mRectPath == null && mPathValues == null) {
        initPaint();
    }

    canvas.drawPath(mRectPath, mBubblePaint);
    canvas.drawPath(mBubblePath, mBubblePaint2);
}

@Override
public void onBoundsChange(Rect bounds) {
    Rect customBound = new Rect(0, 0, bounds.width(), bounds.height() + 50);
    super.onBoundsChange(customBound);
}

现在的问题是,我从drawable中获取宽度和高度来绘制语音气泡的矩形。画布的整个空间都被占用,三角形没有更多空间显示在矩形下方。

我现在的问题是:是否可以更改画布或drawable的大小,以便我能够在矩形下方显示小三角形?

我已经尝试过onBoundsChange方法,但它没有效果。在绘图方法中,大小仍然相同。 如果可能的话,直接在自定义drawable类中更改大小会很好,如上所示,因为当我调用它时,我没有视图的大小。另外我不能使rect的大小变小,因为在drawable中有内容,如果rect较小,一些内容将在drawable之外。我使用了drawable,这样我就可以简单地调用我的布局或TextView的setBackgroundDrawable,它总是匹配内容大小。

如果你们中的任何人都知道如何进行尺寸变化,这将是非常好的。谢谢:D

0 个答案:

没有答案