2010-09-07 13 views
7

Quiero utilizar un mapa de bits que solo en mosaico horizontal, hay alguna manera de hacerlo, de modo que se expanda solo en X como repetir x en CSS. I utilizando el siguiente código, pero la baldosa de mapa de bits horizontal y vertical:Azulejo de mapa de bits de Android en X solo

<?xml version="1.0" encoding="utf-8"?> 
<bitmap xmlns:android="http://schemas.android.com/apk/res/android" 
    android:src="@drawable/pinstripe" 
    android:tileMode="repeat" 
    android:gravity ="top|fill_horizontal" 
    android:dither="true"/> 
+0

¿alguna vez averiguar una solución? – William

Respuesta

10

Aquí está la solución. Puede crear BitmapDrawable en código y especificar solo el modo X tile Android Tile Bitmap

+6

+1 Fedor: Actualmente no hay forma de especificar modos de mosaicos X e Y independientes en XML. – Buzzy

0

Quería repetir el fondo solo verticalmente, pero no pude encontrar ninguna solución decente, así que escribí esto por mi cuenta, espero que esto pueda ayudar alguien por ahí *

/** 
* Created by LeoLink on 2014-06-24. 
*/ 
public class VerticallyRepeatedBackgroundLinearLayout extends LinearLayout { 
    private int width, height; 
    private RectF mRect; 

    public VerticallyRepeatedBackgroundLinearLayout(Context context) { 
     super(context); 
     init(context); 
    } 

    public VerticallyRepeatedBackgroundLinearLayout(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     init(context); 
    } 

    public VerticallyRepeatedBackgroundLinearLayout(Context context, AttributeSet attrs, int defStyleAttr) { 
     super(context, attrs, defStyleAttr); 
     init(context); 
    } 

    private void init(Context context) { 
     setWillNotDraw(false); 
     mRect = new RectF(); 
    } 

    @Override 
    protected void onSizeChanged(int w, int h, int oldw, int oldh) { 
     super.onSizeChanged(w, h, oldw, oldh); 
     if (oldw == 0 && oldh == 0 && w > 0 && h > 0) { 
      width = w; 
      height = h; 
     } 
    } 

    @Override 
    protected void onDraw(Canvas canvas) { 
     super.onDraw(canvas); 
     // clear the canvas 
     canvas.drawColor(Color.WHITE); 
     // draw 
     Drawable bg = getBackground(); 
     Bitmap bm = ((BitmapDrawable)bg).getBitmap(); 
     int w = bg.getIntrinsicWidth(); 
     int h = bg.getIntrinsicHeight(); 
     int drawWidth = width; 
     int drawHeight = drawWidth * h/w; 
     int bottom = 0; 
     while (height > bottom) { 
      mRect.set(0, bottom, drawWidth, bottom + drawHeight); 
      canvas.drawBitmap(bm, null, mRect, null); 
      bottom += drawHeight; 
     } 
    } 
} 

y en su XML

<com.blah.blah.VerticallyRepeatedBackgroundLinearLayout 
    android:id="@+id/collection_container" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:background="@drawable/your_tile_bg"> 
</com.blah.blah.VerticallyRepeatedBackgroundLinearLayout> 
Cuestiones relacionadas