teclados teclado samsung problema para pantalla imagen fondos fondo como celulares celular cambiar automaticamente atributo android

teclado - Imagen de fondo que no se repite en el diseño de Android



fondos para teclados de celulares (4)

He utilizado el siguiente código para repetir la imagen en segundo plano, pero no funciona. ¿Puede alguien ayudarme?

Layout.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@drawable/grass_bg" >

grass_bg.xml en dibujable se ve así

<?xml version="1.0" encoding="utf-8"?> <bitmap xmlns:android="http://schemas.android.com/apk/res/android" android:src="@drawable/grass_small" android:tileMode="repeat"/>

Está mostrando la misma imagen pequeña. no se está repitiendo ...


Cree una copia de grass_bg.xml para cada vez que lo use (es decir, grass_bg_2.xml ). Esto me tileMode para asegurar que la configuración de tileMode no se perdiera cuando el mismo fondo se usa repetidamente.


Los mapas de bits (y sus estados) se reutilizan mucho, y me parece que es fácil perder el tileMode si se utiliza un BitmapDrawable en más de un lugar. El siguiente código soluciona el problema para mí:

public static void fixBackgroundRepeat(View view) { Drawable bg = view.getBackground(); if(bg != null) { if(bg instanceof BitmapDrawable) { BitmapDrawable bmp = (BitmapDrawable) bg; bmp.mutate(); // make sure that we aren''t sharing state anymore bmp.setTileModeXY(TileMode.REPEAT, TileMode.REPEAT); } } }


Me enfrenté al mismo problema pero decidí investigar un poco más profundo. La causa fue que noté una de mis obras dibujables todo el tiempo, mientras que la otra siempre está rota. El truco es que una imagen se hizo a partir de la otra con solo cambios menores en los colores y alfa. El XML de Drawable es idéntico al lado de la referencia a PNG. Así que tomé pnginfo para ver qué hay allí.

diagstripe_dark.png:

Image Width: 18 Image Length: 30 Bitdepth (Bits/Sample): 8 Channels (Samples/Pixel): 3 Pixel depth (Pixel Depth): 24 Colour Type (Photometric Interpretation): RGB Image filter: Single row per byte filter Interlacing: Adam7 interlacing Compression Scheme: Deflate method 8, 32k window Resolution: 2835, 2835 (pixels per meter) FillOrder: msb-to-lsb Byte Order: Network (Big Endian) Number of text strings: 0 of 0

diagstripe_yellow.png:

Image Width: 18 Image Length: 30 Bitdepth (Bits/Sample): 8 Channels (Samples/Pixel): 4 Pixel depth (Pixel Depth): 32 Colour Type (Photometric Interpretation): RGB with alpha channel Image filter: Single row per byte filter Interlacing: No interlacing Compression Scheme: Deflate method 8, 32k window Resolution: 2835, 2835 (pixels per meter) FillOrder: msb-to-lsb Byte Order: Network (Big Endian) Number of text strings: 0 of 0

diagstripe_yellow.png funciona, mientras que diagstripe_dark.png no lo hace, y si sustituyo las referencias con referencia a diagstripe_yellow.png, entonces funciona (al menos en 2.2.1 que obtuve aquí). Así que las principales diferencias son:

Channels (Samples/Pixel): Pixel depth (Pixel Depth): Colour Type (Photometric Interpretation): Interlacing:

El primer intento fue deshabilitar el entrelazado, sin suerte, incluso cuando el encabezado tiene el mismo aspecto:

diagstripe_dark-2.png:

Image Width: 18 Image Length: 30 Bitdepth (Bits/Sample): 8 Channels (Samples/Pixel): 4 Pixel depth (Pixel Depth): 32 Colour Type (Photometric Interpretation): RGB with alpha channel Image filter: Single row per byte filter Interlacing: No interlacing Compression Scheme: Deflate method 8, 32k window Resolution: 0, 0 (unit unknown) FillOrder: msb-to-lsb Byte Order: Network (Big Endian) Number of text strings: 0 of 0

Si alguien se molesta en profundizar, aquí están los archivos: http://webnetmobile.com/files/ o use la herramienta base64 para decodificar los archivos de las citas a continuación:

diagstripe_yellow.png:

iVBORw0KGgoAAAANSUhEUgAAABIAAAAeCAYAAAAhDE4sAAAAAXNSR0IArs4c6QAAAAlwSFlzAAAL EwAACxMBAJqcGAAAAAd0SU1FB9wCEg8JKbHU3pgAAAAdaVRYdENvbW1lbnQAAAAAAENyZWF0ZWQg d2l0aCBHSU1QZC5lBwAAAE5JREFUSMdj7OnpqWdgYGCQft3S8FS0poFcNhM1DHkqWtPAuLxc4D+l hjAwMDAwWwa2MIx6bdRro14b9dqo10a9Nuo1Gnstj4GBQYgSAwG9j8m8FwE2EgAAAABJRU5ErkJg gg==

diagstripe_dark.png:

iVBORw0KGgoAAAANSUhEUgAAABIAAAAeCAIAAAHZaentAAAAAXNSR0IArs4c6QAAAAlwSFlzAAAL EwAACxMBAJqcGAAAAAd0SU1FB9wCDww0GV3Ql5EAAAAdaVRYdENvbW1lbnQAAAAAAENyZWF0ZWQg d2l0aCBHSU1QZC5lBwAAAGVJREFUOMvtkjsSgCAMRFfvfwOiV30WMCBqKFJIQ8XO/tgiAo6UAOUH 2ABJp5mqWri98B3ZXBmoogx0F4GX3w3LrQnZHju61Cfb6j15RqebG/23On/tHMiRkwheyxq5Rs4Z aRZIXsBYcInPMeOmAAAAAElFTkSuQmCC

stripes.xml:

<?xml version="1.0" encoding="utf-8"?> <bitmap xmlns:android="http://schemas.android.com/apk/res/android" android:antialias="false" android:filter="false" android:src="@drawable/diagstripe_yellow" android:tileMode="repeat" />

Habla si tienes más notas.


try{ BitmapDrawable background = (BitmapDrawable) myView.getBackground(); background.setTileModeXY(Shader.TileMode.REPEAT, Shader.TileMode.REPEAT); } catch(Exception e) { /*Do nothing; background is not BitmapDrawable; can be a color or null...*/ }