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)
但仍然行不通.
我遇到了同样的问题,并通过编程方式关闭硬件加速仅解决了将绘制的视图 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)
尝试更换drawPicture用drawBitmap.语法几乎相同,你只需要传递一个源矩形(只是使它成为图像的大小)和一个paint(如果你不编辑图像就可以为null).