获取ImageView的绘制区域的高度和宽度

时间:2013-11-21 11:17:50

标签: android imageview size android-canvas

如果我的ImageView为(800 * 800像素)。当我尝试在此ImageView外部绘制一条线时,它会绘制

    myBitmap = Bitmap.createBitmap(800,800,Bitmap.Config.ARGB_8888);
    myCanvas = new Canvas(myBitmap);
    myPaint = new Paint();
    myImageView.setImageBitmap(myBitmap);
    myCanvas.drawLine(-100, -100, 600, 600, myPaint);

即使起点在外面,也会画出我的线,

现在我想获得它们的总大小,我的意思是[900,900]。我不知道可以从哪个组件获取它(myCanvasmyBitmapmyImageView)。

我希望我的问题很明确。

谢谢你。

2 个答案:

答案 0 :(得分:1)

我认为你需要的是:

使用ImageView.getDrawable().getInstrinsicWidth()getIntrinsicHeight()都会返回原始尺寸。

获取所显示图像的实际尺寸的唯一方法是提取并使用用于显示图像的变换矩阵。这必须在测量阶段之后完成,此处的示例显示在Override onMeasure()中调用自定义ImageView

    public class SizeAwareImageView extends ImageView {

    public SizeAwareImageView(Context context) {
        super(context);
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);

        // Get image matrix values and place them in an array
        float[] f = new float[9];
        getImageMatrix().getValues(f);

        // Extract the scale values using the constants (if aspect ratio maintained, scaleX == scaleY)
        final float scaleX = f[Matrix.MSCALE_X];
        final float scaleY = f[Matrix.MSCALE_Y];

        // Get the drawable (could also get the bitmap behind the drawable and getWidth/getHeight)
        final Drawable d = getDrawable();
        final int origW = d.getIntrinsicWidth();
        final int origH = d.getIntrinsicHeight();

        // Calculate the actual dimensions
        final int actW = Math.round(origW * scaleX);
        final int actH = Math.round(origH * scaleY);
    }
} 

注意:要从代码中获取图像转换矩阵(如在Activity中),该函数是ImageView.getImageMatrix() - 例如myImageView.getImageMatrix()

答案 1 :(得分:1)

我认为您bitmap以外的内容已丢失,您可以通过轮播ImageView进行检查,您会看到bitmap之外的内容黑色即使你画了。