我正在制作一个在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);