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" ...>

но все еще не работает.


person Behzad Momahed Heravi    schedule 30.04.2012    source источник
comment
мой целевой API – 7 <uses-sdk android:minSdkVersion="7"/>   -  person Behzad Momahed Heravi    schedule 13.07.2012


Ответы (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);
    }
}
person ffleandro    schedule 27.12.2012

Попробуйте заменить drawPicture на drawBitmap. Синтаксис почти такой же, вам просто нужно передать исходный прямоугольник (просто сделайте его размером с изображение) и краску (которая, если вы не редактируете изображение, может быть нулевой).

person David Scott    schedule 30.04.2012
comment
Но у меня есть только объект Picture. Я использую link для анализа файлов svg, и он дает только объекты Picture или PictureDrawable. - person Behzad Momahed Heravi; 30.04.2012
comment
Вы должны иметь возможность получить растровое изображение из PictureDrawable с getBitmap(). Я не уверен, какое влияние это окажет на SVG. - person David Scott; 30.04.2012
comment
в порядке. Я использовал PictureDrawable и рисовал на холсте: mPictureDrawable.setBounds(mRect); mPictureDrawable.draw(mCanvas); Теперь все работает, спасибо. Но все же надеялся использовать Picture вместо PictureDrawable - person Behzad Momahed Heravi; 30.04.2012