android.graphics.Picture不是在API 14+中绘制的

时间:2014-06-20 16:57:23

标签: android graphics android-canvas cyanogenmod

当我将清单中的targetAPI从13更改为14(或更高)时,图片不再有效。无论如何或如何。

实施例

    Paint bluepaint = new Paint();
    bluepaint.setColor(Color.BLUE);

    Picture pic = new Picture();
        Canvas testcanvas = pic.beginRecording(300, 300);
        testcanvas.drawColor(Color.BLUE);
    pic.endRecording();

    canvas.drawColor(Color.RED);
    canvas.drawLine(0, 0, 480, 480, bluepaint);

    canvas.drawPicture(pic);

这应该从图片中绘制一个蓝色屏幕,它在API 13和更低版本中这样做。 它不会绘制蓝色,只会绘制纯canvas.draw调用中的红色。

我无法看到API 13到14的任何变化可以解释这一点。

然而,我在Galaxy S2上使用cyanogenmod(所以我可以运行4.3),不确定它们是否会改变氰基上的原生物质,几周前改用它。

知道在哪里寻找答案或可能导致这种情况的原因吗?

修改

工作

<uses-sdk
    android:minSdkVersion="10"
    android:targetSdkVersion="13" />

不工作

<uses-sdk
    android:minSdkVersion="10"
    android:targetSdkVersion="14" />

2 个答案:

答案 0 :(得分:0)

如果targetSdkVersion为14(冰淇淋三明治)或更高,则默认情况下会为整个应用启用硬件加速。 Unfortunately Canvas.drawPicture() is not supported if hardware acceleration is enabled

有两种方法可以解决这个问题:

  1. android:hardwareAccelerated="false"添加到AndroidManifest.xml中的application标记。这将禁用整个应用程序的硬件加速。

  2. 您可以使用硬件加速支持的BitmapCanvas.drawBitmap()

  3. 参考:http://developer.android.com/guide/topics/graphics/hardware-accel.html

答案 1 :(得分:-1)

使用这些依赖...这里26.0.2是一个错误,版本14不支持。给出这些依赖: -

var filterC = filterA.And(filterb);
var usaCustomer = Context.Customer.Where(filterC);

并制作SDK版本: -

**

dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')

    implementation 'com.android.support:appcompat-v7:27.1.1'
    implementation 'com.android.support.constraint:constraint-layout:1.0.2'
    implementation 'com.android.support:design:27.1.1'

    compile 'com.android.support:support-v4:27.1.1'

**

但您可以尝试使用依赖项而无需更改SDK版本。

并记住canvas.restore();不要用