[ОБНОВЛЕНО с дополнительным кодом]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 некорректен и оказывает широкую белой каймы, как показано ниже. Это часть рендеринга растровых изображений, но не часть исходного растрового изображения или прямоугольника.
Правильный (по желанию) результат на телефоне Samsung Galaxy:
Изображение и код, показанный в обоих вышеприведенных примерах точно так же. Я уже опробовал варианты, используя null paint, null srcRect и даже используя альтернативный метод drawBitmap (bitmap, 0, 0, null) и получаю те же результаты. Глядя на код фреймворка, конечно drawBitmap() вызывает непосредственно собственные методы, исходный код которых я не могу просмотреть.
Данное изображение показалось малочисленному числу изображений, и кажется, что в основном квадратные изображения демонстрируют его. Но вот только один другой неквадрат образ, который демонстрирует эту проблему:
Большинство этих изображений слегка повернуты дали нужный пользовательский вид, и теперь происходит со мной, что вращение может быть частью проблема, но, возможно, не так, поскольку холст не вращается, как раз когда он скопирован на поддержку растровых изображений холста родителя Android.
Любые идеи? Это орехи!
Не могли бы вы поделиться еще немного кода? Если вы занимаетесь обработкой поверхности, тогда нет никакой гарантии относительно порядка z, но из-за вашего недостатка кода не ясно, что вы на самом деле делаете. –