自定义 ImageView 中没有填充效果

No padding-effect in custom ImageView

我在为自定义 ImageView 分配 padding-values 时遇到问题。请注意,我不是扩展 ImageView 而是 View:

public class CustomImageView extends View

图像是通过路径从资产文件夹加载的。 Source- 和 Target-RectonLayout(...) 中计算,位图在 onDraw(...).

中分配

好消息:图像已显示 ;-)

坏消息:setPadding(...) 分配 padding-values 对图像没有影响(问题要解决!)。我用 "normal" ImageView-Object 测试了它,它按预期工作。但不幸的是,任务是从 View 扩展我的自定义 class,而不是 ImageView。所以如果有人知道如何解决这个问题 - 我绝对不是第一个遇到这个问题的人 ;-) - 让我知道!

这是onDraw-方法,没有魔法:

@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);

    if (bitmap != null)
        canvas.drawBitmap(bitmap, sourceRect, targetRect, paint);
}

当您设置填充以查看时,应在绘图过程中考虑它们。您可以通过在自定义视图中创建一个 BitmapDrawable 变量来实现这一点,然后对其进行初始化并根据填充进行绘制。

private BitmapDrawable mDrawable;

public void setBitmap(Bitmap bitmap) {
    mDrawable = new BitmapDrawable(getResources(), bitmap);
    invalidate();
}

@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);

    if (mDrawable != null) {
        int paddingLeft = getPaddingLeft();
        int paddingTop = getPaddingTop();
        int paddingRight = getPaddingRight();
        int paddingBottom = getPaddingBottom();

        int contentWidth = getWidth() - paddingLeft - paddingRight;
        int contentHeight = getHeight() - paddingTop - paddingBottom;

        mDrawable.setBounds(paddingLeft, paddingTop,
                paddingLeft + contentWidth, paddingTop + contentHeight);
        mDrawable.draw(canvas);
    }
}