在Android自定义视图中进行缩放时遇到一些问题

时间:2013-09-02 14:29:51

标签: android android-custom-view

我在android中创建了一个简单的自定义控件,并在其上放置了一个背景图像。当控件放在不同尺寸的布局上时(即拉伸时),我遇到了问题,具体来说:

  1. 我想在特定的位置和大小上叠加一个矩形,我知道原始图像的像素位置。我怎么能用我的控制来做到这一点。我怀疑这样的事情是不可能的,因为它是一个9补丁。我最好的办法是从原来的左上角开始计算百分比,或者考虑到某些部分是否伸展而有些部分没有变得毫无意义?

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

    setBackgroundResource(R.drawable.buttonbt);

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

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

    但是这并没有根据其边界框的大小调整大小,它只是试图以它的原始大小显示它而不缩放以适应。你会怎么做(前一种方法是否更好)。

    感谢。

2 个答案:

答案 0 :(得分:1)

您可以创建一个缩放位图,如下所示

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

希望它对你有用。请让我知道!

答案 1 :(得分: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()