扩展Android ImageView时应该在哪里应用转换?

时间:2013-12-05 21:47:59

标签: android android-imageview android-image

我正在制作一个在Android上扩展ImageView的自定义组件。组件功能相当复杂 - 要始终通过缩放填充其容器的高度,但要修剪宽度上的空白区域。在应用任何缩放之前,如果宽度大于高度,它还将自动应用90度旋转变换。

我知道如何进行这些转换并将结果输出到文件中,因此我知道它们可以正常工作。我不知道的是在扩展View时执行此操作的方法/方法。

我现在不包括转换代码,因为它似乎不相关,但下面显示我目前称这些转换的位置

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    if (!mConversionComplete) {
        applyTransformations(widthMeasureSpec, heightMeasureSpec);
    }
    Drawable imageDrawable = getDrawable();
    if (imageDrawable != null) {
        int height = MeasureSpec.getSize(MeasureSpec.AT_MOST);
        int width = (int) Math.ceil((float) height * (float)     imageDrawable.getIntrinsicWidth() / (float) imageDrawable.getIntrinsicHeight());
        setMeasuredDimension(width, height);
    } else {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    }
}

我正在进行onMeasure的转换,因为我需要能够使用测量规范(如下)。我记录我是否已经处理了转换,所以我只做了一次,但我认为这可能是一个“正确”的地方,这不是onMeasure

int targetHeight = MeasureSpec.getSize(heightMeasureSpec);
int targetWidth = MeasureSpec.getSize(widthMeasureSpec);

1 个答案:

答案 0 :(得分:2)

根据您对自定义的说明,您应该将范围限制为确定ImageView的尺寸并使用setImageMatrix。让android系统为你做 hard 工作。