扩展Android ImageView';s

扩展Android ImageView';s,android,android-imageview,android-image,Android,Android Imageview,Android Image,我正在制作一个自定义组件,它扩展了Android上的ImageView。components函数相当复杂——总是通过缩放填充容器的高度,但要修剪宽度上的空白。如果宽度大于高度,在应用任何缩放之前,它还会自动应用90度旋转变换 我知道如何进行这些转换,并已将其结果输出到文件中,因此我知道它们工作正常。我不知道的是,在扩展视图时,在何处/用什么方法执行此操作 我现在不包括转换代码,因为它似乎不相关,但下面显示了我当前调用这些转换的位置 @Override protected void onMeasu

我正在制作一个自定义组件,它扩展了Android上的ImageView。components函数相当复杂——总是通过缩放填充容器的高度,但要修剪宽度上的空白。如果宽度大于高度,在应用任何缩放之前,它还会自动应用90度旋转变换

我知道如何进行这些转换,并已将其结果输出到文件中,因此我知道它们工作正常。我不知道的是,在扩展视图时,在何处/用什么方法执行此操作

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

@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进行转换,因为我需要能够使用度量规范(见下文)。我记录了我是否处理过转换,这样我只做了一次,但我认为可能有一个“正确”的地方来做这件事,这是不可测量的

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

根据您对自定义的描述,您应该将范围限制为确定ImageView的尺寸和使用。让android系统为您完成这项艰巨的工作。

您阅读过自定义视图吗?嘿,是的,尝试在onDraw中应用转换,但没有成功。这本教程让我觉得onMeasure可能是正确的,但是我觉得它的实现很粗糙,所以我想我应该咨询一下这里的一些人。谢谢,这是我的第一次尝试,但因为我正在尝试先进行预旋转,然后进行后缩放(高度和宽度现在有效地颠倒了)它死亡是因为它试图创建位图。你所说的“死亡”是什么意思,post
logcat
log(如果适用)。宽度为1k,高度为500;我已经旋转,现在它们是相反的;创建高度为100的位图并应用矩阵。。。Log cat给出了一个类似“y+高度必须>=界限”的错误。我明天在我的机器上时会发布确切的消息和矩阵