Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Imagen SVG no visible en android 3.0+ con el mismo código

Tengo una aplicación de prueba donde tengo un ListView con un elemento que contiene dos imágenes en él.

Nexo 7 vs deseo hd

Como se puede ver en el dispositivo API 17 no se muestra el botón de reproducción (imagen SVG) mientras que el dispositivo API 10 lo hace. ¿Cómo puedo arreglar eso?

Mi archivo de diseño:

<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <ImageView android:id="@+id/background" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:scaleType="centerCrop" /> <ImageView android:id="@+id/forceground" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_centerVertical="true" /> </RelativeLayout> 

Aquí está mi código básico donde pongo las imágenes:

 View preview = inflater.inflate(R.layout.list_video_preview, parent, false); ImageView background = (ImageView)preview.findViewById(R.id.background); ImageView forceground = (ImageView)preview.findViewById(R.id.forceground); PictureDrawable play = SVGParser.getSVGFromResource(parent.getResources(), R.raw.play_blue).createPictureDrawable(); forceground.setImageDrawable(play); 

El SVG paser es de svg-android .

  • Android: cargar archivo svg desde la web y mostrarlo en la vista de imagen
  • Recibo sólo pantalla en blanco mientras se utiliza svg-android
  • Escala de lienzo para cambiar el tamaño de SVG en Android
  • 2 Solutions collect form web for “Imagen SVG no visible en android 3.0+ con el mismo código”

    El problema es la aceleración de hardware. La solución es utilizar bitmaps instad de drawables. Para la fijación que he añadido esta función a la SVG.java que devuelve un BitmapDrawable :

     public BitmapDrawable createBitmapDrawable(Context context) { Bitmap bitmap = Bitmap.createBitmap(picture.getWidth(), picture.getHeight(), Config.ARGB_8888); Canvas canvas = new Canvas(bitmap); PictureDrawable drawable = new PictureDrawable(picture); drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight()); drawable.draw(canvas); return new BitmapDrawable(context.getResources(), bitmap); } 

    El problema con su solución es que está perdiendo toda la información de dibujo al convertirla en un Bitmap . En tu caso no se aplica, pero si necesitas soportar el Zooming y el Panning , Panning escalando y cambiando el tamaño de un Bitmap y obtendrías gráficos pixelados. Además, es mucho más ineficiente dibujar una Picture en un Bitmap que luego será dibujado por la View que lo contiene.

    Tuve el mismo problema que experimentó y lo resolvió desactivando la aceleración de hardware sólo en la vista que dibujará la Picture :

     view.setLayerType(View.LAYER_TYPE_SOFTWARE, null); 

    Sin embargo setLayerType sólo se admite desde la API 11. Así que utilice este método en su lugar:

     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); } } 
    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.