Xamarin Android自定义图像渲染器Canvas.DrawBitmap翻转图像
我有两个图像:一个是空罐子,另一个是同一个罐子,但有填充物。我的目标是使用自定义渲染器绘制空jar,计算百分比,然后将完整jar的一个子集复制到空jar上,以根据值响应地模拟jar填充。为此,我制作了一个自定义的ImageRenderer 我已重写Draw()类,如下所示:Xamarin Android自定义图像渲染器Canvas.DrawBitmap翻转图像,xamarin,xamarin.android,xamarin.forms,custom-renderer,Xamarin,Xamarin.android,Xamarin.forms,Custom Renderer,我有两个图像:一个是空罐子,另一个是同一个罐子,但有填充物。我的目标是使用自定义渲染器绘制空jar,计算百分比,然后将完整jar的一个子集复制到空jar上,以根据值响应地模拟jar填充。为此,我制作了一个自定义的ImageRenderer 我已重写Draw()类,如下所示: public override void Draw(Canvas canvas) { base.Draw(canvas); //Draw the fill GoalJ
public override void Draw(Canvas canvas)
{
base.Draw(canvas);
//Draw the fill
GoalJarView handle = (GoalJarView)this.Element;
int startY = (int)(canvas.Height - Math.Floor(canvas.Height * (handle.CurrentValue / handle.GoalValue)));
Rect bounds = new Rect(0, startY, canvas.Width, canvas.Height);
Bitmap bmp = BitmapFactory.DecodeResource(this.Context.Resources, Resource.Drawable.jar_fill);
canvas.DrawBitmap(bmp, bounds, bounds, null);
}
出于某种原因,这会导致绘制正确的图像,但无论出于何种原因,图像都会颠倒并位于错误的位置:
奇怪的是,如果我将src矩形更改为null,它会显示在正确的位置,右侧向上,但不会被裁剪
canvas.DrawBitmap(bmp, null, bounds, null);
为什么Android会翻转这个图像 您必须考虑到您的
可绘制
与视图
的画布大小不同(假设您使用的是图像视图
子类),您必须将位图缩放到视图的画布上,因此您的src
和dst
矩形不相同
以下是一个例子:
protected override void OnDraw(Canvas canvas)
{
base.OnDraw(canvas);
if ((Current > Max) || (Current <= 0.0)) return;
var percentComplete = Current / Max;
var overlayYFrom = (int)(overlayBitmap.Height - (overlayBitmap.Height * percentComplete));
var overlayYTo = (int)(canvas.Height - (canvas.Height * percentComplete));
var drawRectFrom = new Rect(0, overlayYFrom, overlayBitmap.Width, overlayBitmap.Height);
var drawRectTo = new Rect(0, overlayYTo, canvas.Width, canvas.Height);
canvas.DrawBitmap(overlayBitmap, drawRectFrom, drawRectTo, null);
}
protectedoverride void OnDraw(画布)
{
底座.OnDraw(帆布);
如果((当前>最大)| |(当前)