【问题标题】:Hardware Accelerated Canvas硬件加速画布
【发布时间】:2015-09-15 20:48:55
【问题描述】:

我目前正在制作一个在画布上绘制的密集型 LiveWallpaper。我偶然看到了以下视频:http://www.youtube.com/watch?v=v9S5EO7CLjo.

但是,当我尝试实现硬件加速时,出现错误。这是我的代码:

if (c != null && mStaticRects.length > 10 && c.isHardwareAccelerated())
                    drawSurfacePortrait(c);

if (c != null && mStaticRects.length < 20 && c.isHardwareAccelerated())
                    drawSurfaceLandscape(c);

当我运行这个时,这里是相应的错误:

AndroidRuntime(382): java.lang.NoSuchMethodError: android.graphics.Canvas.isHardwareAccelerated

最后这是我的清单......

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="stuff.of.mine"
    android:versionCode="1"
    android:versionName="1.0" >

<uses-sdk android:minSdkVersion="7" android:targetSdkVersion="15" />

<uses-permission android:name="android.permission.VIBRATE" ></uses-permission>


<uses-feature
    android:name="android.software.live_wallpaper"
    android:required="true" />

<application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name" 
    ***android:hardwareAccelerated="true"***>
    <service
        android:name=".SomeWPService"
        android:permission="android.permission.BIND_WALLPAPER" 
        ***android:hardwareAccelerated="true"***>
        <intent-filter>
            <action android:name="android.service.wallpaper.WallpaperService" />
        </intent-filter>

        <meta-data
            android:name="android.service.wallpaper"
            android:resource="@xml/mylwp" />
    </service>

</application>

【问题讨论】:

    标签: android hardware android-canvas


    【解决方案1】:

    好的,我正在搜索 stackoverflow 并偶然发现了我自己问题的答案

    事实上,视频中的其中一个人 Romain Guy 在以下线程中回答了:

    SurfaceView 中的画布 - 硬件加速

    他说:

    SurfaceView.lockCanvas() 返回的 Canvas 目前无法进行硬件加速。

    我想知道的是如何在没有 SurfaceView.lock 和 unlockCanvas 的情况下创建动态壁纸?

    【讨论】:

      【解决方案2】:

      canvas.isHardwareAccelerated在 API 11 中引入,您的 minSdkVersion 为 7。尝试将其更改为 11。

      【讨论】:

      • 谢谢,它现在加载,但它不会绘制任何东西。我只剩下一个空画布。我认为该方法已被识别,但它返回 false。
      • 我添加了一个媒体播放器来检查 c.isHardwareAccelerated() 是否为假: if (c != null && mStaticRects.length > 10 && c.isHardwareAccelerated()) drawSurfacePortrait(c);否则 mp.start(); if (c != null && mStaticRects.length
      • 您使用的是模拟器吗?据我所知,模拟器中没有硬件加速。
      • 不,我在真机上测试。
      【解决方案3】:

      您可以在以下级别控制硬件加速:

      • 应用
      • 活动
      • 窗口
      • 查看

      在您的代码中,

      <service
              android:name=".SomeWPService"
              android:permission="android.permission.BIND_WALLPAPER" 
              ***android:hardwareAccelerated="true"***>
      

      服务标签不包含 android:hardwareAccelerated !

      【讨论】:

        猜你喜欢
        • 2012-03-24
        • 2012-10-28
        • 2015-03-16
        • 1970-01-01
        • 2014-04-18
        • 2013-12-31
        • 1970-01-01
        • 2011-09-20
        • 2023-03-31
        相关资源
        最近更新 更多