7

I want to use a Bitmap that Tile on the Horizontal only, is there any way to do it, so that it will expand only on X like repeat x on CSS. I using the following code but the bitmap tile Horizontal and vertical :

<?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"/>
Attacktive
  • 604
  • 1
  • 11
  • 25
imrabti
  • 285
  • 4
  • 11

2 Answers2

10

Here is the solution. You can create BitmapDrawable in code and specify only X tile mode Android Tile Bitmap

Community
  • 1
  • 1
Fedor
  • 43,261
  • 10
  • 79
  • 89
  • 6
    +1 Fedor: Currently there is no way to specify independent X and Y tile modes in XML. – Buzzy Jun 24 '11 at 18:16
0

I wanted to repeat background only vertically as well, but I couldn't found any decent solution out there, so I wrote this my own, hope this can help someone out there*

/**
 * 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;
        }
    }
}

and in your 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>
Leo
  • 1,433
  • 23
  • 40