我想使用仅在水平上平铺的Bitmap,有没有办法做到这一点,所以它只会在X上扩展,就像在CSS上重复x一样。 我使用以下代码,但位图tile水平和垂直:
<?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 :(得分:10)
这是解决方案。您可以在代码中创建BitmapDrawable,并仅指定X tile模式Android Tile Bitmap
答案 1 :(得分:0)
我也想垂直重复背景,但我找不到任何合适的解决方案,所以我自己写了这个,希望这可以帮助那些人*
/**
* 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>