2012-04-16 23 views
8

Uygulamamda donanım hızlandırma etkinleştirildi ancak bu özelliklerden birini devre dışı bıraktım, çünkü inme kapaklarıyla ve başka şeylerle ilgili sorunlar yaşadım.GLES20Canvas.clip içinde desteklenmeyenOperationException Donanım hızlandırması devre dışı bırakıldı görünümünde

Şimdi Google bu yığın izleme Crash Hatalar konsolu oyna alıyorum: Ben AndroidManifest.xml android:hardwareAccelerated="true" belirttiğiniz

java.lang.UnsupportedOperationException 
at android.view.GLES20Canvas.clipPath(GLES20Canvas.java:287) 
at com.myapp.MyCustomView.onDraw(SourceFile:288) 
at android.view.View.draw(View.java:9310) 
at android.view.View.getDisplayList(View.java:8773) 
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:2298) 
... 
at android.view.HardwareRenderer$GlRenderer.draw(HardwareRenderer.java:609) 
at android.view.ViewRoot.draw(ViewRoot.java:1634) 
at android.view.ViewRoot.performTraversals(ViewRoot.java:1450) 
at android.view.ViewRoot.handleMessage(ViewRoot.java:2094) 
at android.os.Handler.dispatchMessage(Handler.java:99) 
at android.os.Looper.loop(Looper.java:132) 
at android.app.ActivityThread.main(ActivityThread.java:4123) 
... 

. Ama benim özel bakış yapıcısı içinde Özellikle engelli donanım hızlandırma: uyumluluğu sayesinde

public MyCustomView(Context context, AttributeSet attrs, int defStyle) { 
      super(context, attrs, defStyle); 

      // ... code omitted 

      // disable acceleration because Paint.setStrokeCap(Cap.ROUND) is not working otherwise 
      Compatibility.disableHardwareAcceleration(this); 
    } 

bu varlık:

public class Compatibility { 
     // View.setLayerType() was introduced in Honeycomb 
     private static Method setLayerTypeMethod = getMethod(View.class, "setLayerType", int.class, 
         Paint.class); 

     private static Method getMethod(Class<?> clazz, String name, Class<?>... parameterTypes) { 
       try { 
         return clazz.getMethod(name, parameterTypes); 
       } 
       catch (NoSuchMethodException e) { 
         return null; 
       } 
     } 

     private Compatibility() { 
     } 

     public static void disableHardwareAcceleration(View view) { 
       try { 
         if (setLayerTypeMethod != null) { 
           int layerType = 1; // View.LAYER_TYPE_SOFTWARE 
           setLayerTypeMethod.invoke(view, layerType, null); 
         } 
       } 
       catch (Exception ignored) { 
       } 
     } 
} 

Maalesef Crash Hataları konsolu Android işletim sistemi sürümü veya cihaz hakkında bilgi ifşa etmez.

Neler olabileceği hakkında bir fikrin var mı?

cevap

6

LAYER_TYPE_SOFTWARE ayarlanmış olsa bile, görünümün hala donanım hızlandırması kullanılarak çizildiği bir sorun var. Detaylar sorunlu kod atlamak için iki şey

  1. kullanım Canvas.isHardwareAccelerated() yapabilirsiniz Çözüm olarak

    here bulunmaktadır.

  2. Sorunlu nesneleri bir bitmap'e çizin ve bunu donanım hızlandırılmış görünümüne canvas.drawBitmap() ile çizin.
İlgili konular