[更新,添加代码]的Android canvas.drawBitmap()渲染错误
我在与Android的正确渲染一些位图在我的自定义视图的OnDraw(一个主要问题)上的一些(的Nexus 7和10方法我知道)但不是所有的设备。它在我用于测试的Android手机上正确渲染。以下是结果摘录:
/* set up mImagePaint earlier */
mImagePaint.setAntiAlias(true);
mImagePaint.setFilterBitmap(true);
mImagePaint.setDither(true);
mImagePaint.setStyle(Paint.Style.FILL_AND_STROKE);
mImagePaint.setStrokeWidth(0);
mImagePaint.setColor(Color.WHITE);
protected void onDraw(Canvas canvas) {
final float vw = getWidth();
final float vh = getHeight();
final float bw = mBitmap.getWidth();
final float bh = mBitmap.getHeight();
final float ba = bw/bh;
final float va = vw/vh;
if (va > ba) {
final float top = (bh - ba/va * bh)/2;
mSrcRect.set(0, (int) top, (int) bw, (int) (bh - top));
} else {
final float left = (bw - va/ba * bw)/2;
mSrcRect.set((int) left, 0, (int) (bw - left), (int) bh);
}
mContentRect.set(0, 0, vw, vh);
canvas.drawBitmap(mBitmap, mSrcRect, mContentRect, mImagePaint);
}
Nexus 7和10上的结果不正确,并呈现如下所示的宽白色边框。这是位图渲染的一部分,但不是原始位图或矩形的一部分。
正确(期望的)导致一个三星Galaxy电话上:在以上两个实施例中所示
图像和代码是完全一样的。我已经尝试过使用null paint,null srcRect,甚至使用替代方法drawBitmap(bitmap,0,0,null)的变体,并获得相同的结果。看看框架代码,drawBitmap()当然会直接调用其源代码无法查看的本地方法。
只有少量的图像似乎表现出这个问题,似乎大多是方形图像展示它。但这里只有一个出现此问题的其他非正方形图片:
大多数图像都稍微旋转的所需自定义视图,它现在发生,我认为旋转可能是部分问题,但也许不是,因为画布不旋转,只是当它被复制到Android的父级画布位图时。
任何想法?这太疯狂了!
你能分享一点点代码吗?如果你正在对surfaceViews进行分层,那么就不能保证你的z排序,但是从你缺乏代码的角度不清楚你实际上在做什么 – 2013-03-15 20:17:30