Android Canvas.drawPicture在冰淇淋三明治设备中不起作用

Beh*_*avi 3 android canvas hardware-acceleration android-4.0-ice-cream-sandwich

我想画Picture上一个Canvas

mCanvas.drawpicture(mPicture, mRect)
Run Code Online (Sandbox Code Playgroud)

使用目标API 7 <uses-sdk android:minSdkVersion="7"/>,它在API <14的设备中完美运行,但在使用Ice Cream Sandwich的设备中,它不起作用.显然这是因为硬件加速不支持canvas.drawPicture:不支持的绘图操作 我试图通过禁用Manifest中的硬件加速来解决这个问题:

<application android:hardwareAccelerated="false" ...>
Run Code Online (Sandbox Code Playgroud)

但仍然行不通.

ffl*_*dro 6

我遇到了同样的问题,并通过编程方式关闭硬件加速仅解决了将绘制的视图 Picture

view.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
Run Code Online (Sandbox Code Playgroud)

但是,自API 11以来仅支持setLayerType.因此请使用此方法:

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);
    }
}
Run Code Online (Sandbox Code Playgroud)


Dav*_*ott 5

尝试更换drawPicturedrawBitmap.语法几乎相同,你只需要传递一个源矩形(只是使它成为图像的大小)和一个paint(如果你不编辑图像就可以为null).

  • 好.我使用了PictureDrawable并在画布上绘图:`mPictureDrawable.setBounds(mRect); mPictureDrawable.draw(mCanvas);`它现在有效,谢谢.但仍然希望使用Picture而不是PictureDrawable (2认同)