android TouchImageView的高度没有变化

时间:2015-02-05 11:17:39

标签: android bitmap height zoom touchimageview

我正在使用TouchImageView(https://github.com/MikeOrtiz/TouchImageView)以全屏显示位图。当我把正常的位图:

touchImageView.setImageBitmap(bm);

如果用户双击或2次手指捏缩放,图片会缩放,但TouchImageView的宽度/高度保持不变。

当我把位图放大时,屏幕宽度/高度一切都按预期工作:

Bitmap new_bm = Bitmap.createScaledBitmap(bm, 
            more_px_then_screen_width, more_px_then_screen_height, false);
touchImageView.setImageBitmap(bm);

这是xml:

    <TouchImageView 
    android:id="@+id/picture_full_screen"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true" />

请帮助!

1 个答案:

答案 0 :(得分:1)

调查后我发现了这个功能:

/**
 * Set view dimensions based on layout params
 * 
 * @param mode 
 * @param size
 * @param drawableWidth
 * @return
 */
private int setViewSize(int mode, int size, int drawableWidth) {
    int viewSize;
    switch (mode) {
    case MeasureSpec.EXACTLY:
        viewSize = size;
        break;

    case MeasureSpec.AT_MOST:
        viewSize = Math.min(drawableWidth, size);
        break;

    case MeasureSpec.UNSPECIFIED:
        viewSize = drawableWidth;
        break;

    default:
        viewSize = size;
        break;
    }
    return viewSize;
}

稍后,用户将onMeasure计算viewWidthviewHeight

中使用的
setMeasuredDimension(viewWidth, viewHeight);

setViewSize改为此让我获得了预期的效果:

/**
 * Set view dimensions based on layout params
 * 
 * @param mode 
 * @param size
 * @param drawableSize
 * @return
 */
private int setViewSize(int mode, int size, int drawableSize) {
    int viewSize;
    switch (mode) {
    case MeasureSpec.EXACTLY:
        viewSize = (int) (size*Math.max(normalizedScale, 1.0));
        break;

    case MeasureSpec.AT_MOST:
        viewSize = (int) (size*Math.max(normalizedScale, 1.0));
        break;

    case MeasureSpec.UNSPECIFIED:
        viewSize = drawableSize;
        break;

    default:
        viewSize = (int) (size*Math.max(normalizedScale, 1.0));
        break;
    }
    return viewSize;
}

我将drawableWidth的名称更改为drawableSize以进行代码整理,因为该函数也用于计算宽度和高度。

希望有人会觉得这很有帮助。