我试图实现一个自定义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