使用矩阵缩放Imageview

时间:2016-04-07 07:09:11

标签: android android-imageview

您好我正在尝试使用以下代码放大我的imageview中图片上的特定点:

private void calculateAndZoom() {

    matrix.set(getImageMatrix());
    printMatrixValues(getImageMatrix());

    float startpointY = (start_y_rel/ template_y_rel) * getHeight() * scale;
    float startpointX = (start_x_rel / template_x_rel)* getWidth() * scale;

    PrintDevMessage.print("Width: " + getWidth() + " Height: " + getHeight());

    matrix.setScale(1,1,0,0);
    matrix.postScale(scale, scale, startpointX, startpointY);

    this.setScaleType(ImageView.ScaleType.MATRIX);
    this.setImageMatrix(matrix);

    printMatrixValues(getImageMatrix());
}

start_y_rel和start_x_rel是相对于template_y_rel和template_x_rel的点

我使用matrix.setScale(1,1,0,0)删除任何先前的缩放并移动到第一个位置。

此代码适用于比例3,但当我尝试其他比例时,它会放大错误的位置。

1 个答案:

答案 0 :(得分:0)

好的,经过3天的搔痒,我找到了解决方案:

private void calculateAndZoom() {

    float cScale=getMatrixValue(getImageMatrix(),Matrix.MSCALE_X);

    float newScale = ((float)1.0/cScale)*scale;

    matrix.set(getImageMatrix());
    printMatrixValues(matrix);

    float startpointY = ((start_y_rel / template_y_rel) * getHeight());
    float startpointX = ((start_x_rel / template_x_rel) * getWidth());

    PrintDevMessage.print("Width: " + getWidth() + " Height: " + getHeight());

    matrix.postScale(newScale, newScale, startpointX, startpointY);

    this.setScaleType(ImageView.ScaleType.MATRIX);
    this.setImageMatrix(matrix);

    printMatrixValues(getImageMatrix());

}

我没有说明图像比屏幕大,当放在图像视图中时,比例会改变。所以我不得不用这样的旧比例重新计算我想要的比例:

    float newScale = ((float)1.0/cScale)*scale;