Я хотел повторить фон только по вертикали, но я не смог найти достойного решения там, поэтому я написал это самостоятельно, надеюсь, это может кому-то помочь *
/**
* 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;
}
}
}
ив вашем 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>