自定义 ImageView 中没有填充效果
No padding-effect in custom ImageView
我在为自定义 ImageView 分配 padding-values 时遇到问题。请注意,我不是扩展 ImageView
而是 View
:
public class CustomImageView extends View
图像是通过路径从资产文件夹加载的。 Source- 和 Target-Rect
在 onLayout(...)
中计算,位图在 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);
}
}
我在为自定义 ImageView 分配 padding-values 时遇到问题。请注意,我不是扩展 ImageView
而是 View
:
public class CustomImageView extends View
图像是通过路径从资产文件夹加载的。 Source- 和 Target-Rect
在 onLayout(...)
中计算,位图在 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);
}
}