Android Canvas.drawPicture не работает на устройствах с бутербродом с мороженым
Я хочу нарисовать Picture
на Canvas
от
mCanvas.drawpicture(mPicture, mRect)
Использование целевого API 7 <uses-sdk android:minSdkVersion="7"/>
, он отлично работает на устройствах с API<14, но на устройствах с Ice Cream Sandwich не работает. Видимо, это потому, что canvas.drawPicture не поддерживается с аппаратным ускорением: неподдерживаемые операции рисования. Я попытался исправить это, отключив аппаратное ускорение в манифесте:
<application android:hardwareAccelerated="false" ...>
но все равно не работает.
2 ответа
У меня была та же проблема, и она была решена программным отключением аппаратного ускорения только в том случае, если Picture
view.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
Однако setLayerType поддерживается только начиная с API 11. Поэтому используйте этот метод:
public static void setHardwareAccelerated(View view, boolean enabled){
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB){
if(enabled)
view.setLayerType(View.LAYER_TYPE_HARDWARE, null);
else view.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
}
}
Попробуйте заменить drawPicture
с drawBitmap
, Синтаксис практически одинаков, вам просто нужно передать исходный прямоугольник (просто сделайте его размером с изображение) и рисовать (который, если вы не редактируете изображение, может быть нулевым).