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, Синтаксис практически одинаков, вам просто нужно передать исходный прямоугольник (просто сделайте его размером с изображение) и рисовать (который, если вы не редактируете изображение, может быть нулевым).

Другие вопросы по тегам