【问题标题】:No padding-effect in custom ImageView自定义 ImageView 中没有填充效果
【发布时间】:2015-09-11 19:37:42
【问题描述】:

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

public class CustomImageView extends View

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

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

坏消息:setPadding(...) 分配 padding-values 对图像没有影响(问题要解决!)。我用“正常”ImageView-Object 对此进行了测试,它按预期工作。但不幸的是,任务是从View 扩展我的自定义类,而不是ImageView。因此,如果有人知道如何解决这个问题——而且我绝对不是第一个遇到这个问题的人 ;-)——请告诉我!

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

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

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

【问题讨论】:

  • 你能发布你的onDraw方法吗?
  • 阅读查看 javadocs,“大小、填充和边距”部分

标签: android image imageview padding android-custom-view


【解决方案1】:

当您设置填充以查看时,应在绘图期间考虑它们。例如,您可以通过在自定义视图中创建一个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);
    }
}

【讨论】:

    猜你喜欢
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多