仅限X上的Android位图图块

时间:2010-09-07 10:30:12

标签: android bitmap

我想使用仅在水平上平铺的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"/>

2 个答案:

答案 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>