0

我在 android 中创建了一个简单的自定义控件,并在其上放置了背景图像。当控件以不同大小放置在布局上时(即拉伸时),我遇到了问题,特别是:

  1. 我希望在特定位置和大小处覆盖一个矩形,我知道原始图像的像素位置。我怎么能用我的控制做到这一点。我怀疑这样的事情是不可能的,因为它是一个 9 补丁。我最好的选择是从原件的顶部/左侧计算出百分比,还是考虑到某些部分拉伸而有些则没有,这毫无意义?

  2. 在自定义控件中,我在构造函数中设置了这样的图像:

    setBackgroundResource(R.drawable.buttonbt);

哪个工作得很好,但是我最初想在 onDraw 事件中绘制它,因为我可能想根据属性更改来更改它,例如

Bitmap b=BitmapFactory.decodeResource(getResources(), R.drawable.buttonbt);
canvas.drawBitmap(b, 0, 0, null);

但这不会根据其边界框的大小调整大小,它只是试图以原始大小显示它而不缩放以适应。你将如何做到这一点(无论前一种方法是否更好)。

谢谢。

4

2 回答 2

1

You can create a scaled bitmap as below

Bitmap bitmap = Bitmap.createScaledBitmap(b, width, height, true);

Hope it will work for you. Please let me know!

于 2013-09-02T15:37:23.977 回答
0

好的,当您的视图是 100x100 像素并且您的位图是 300x300 时,您可以在 inDraw 方法中尝试以下(此处为伪代码):

# src is a Bitmap 300x300
# dst is a View 100x100
mMatrix.setRectToRect(RectF src, RectF dst, Matrix.ScaleToFit stf)
canvas.save()
canvas.concat(mMatrix)
canvas.drawBitmap(mBitmap, 0, 0, null)
// actually it will draw a rect with left/top edge at (10, 10) and right/bottom at (20, 20)
canvas.drawRect(30, 30, 60, 60, paint)
canvas.restore()
于 2013-09-02T17:11:47.053 回答