[更新,添加代碼]的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