如何设置平铺drawable的大小

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何设置平铺drawable的大小相关的知识,希望对你有一定的参考价值。

我有一张应该有棋盘背景的桌子。为此,我使用像这样的平铺drawable:

TiledDrawable boardBg;
boardBg = new TiledDrawable(menuSkin.getTiledDrawable("boardBg"));
boardTable.setBackground(boardBg);

然后每个图块具有drawable默认的大小,例如64px。我需要做什么才能使每个瓷砖更大?我试过了

boardBg.setMinWidth(500);
boardBg.setMinHeight(500);

但这没有任何影响。

答案

TiledDrawable类不支持缩放我创建了一个扩展TiledDrawable并可以缩放的类。你最好不要缩小0.1以上,这将是一个性能值(取决于纹理的大小)。因此在缩小时要小心使用。注意我没有考虑当比例设置为零时所以可能创建一个方法setScale,它会在发生错误时抛出错误。像这样使用ScaledTiledDrawable:

ScaledTiledDrawable scaledTiledDrawable = new ScaledTiledDrawable( new TextureRegion( texture ) );
scaledTiledDrawable.getScale().set( 0.5f, 0.5f );

这是班级:

public class ScaledTiledDrawable extends TiledDrawable {

    private Vector2 scale = new Vector2();
    private Affine2 transform = new Affine2();
    private Matrix4 matrix = new Matrix4();
    private Matrix4 oldMatrix = new Matrix4();

    public ScaledTiledDrawable() {

        super();
    }

    public ScaledTiledDrawable( TextureRegion region ) {

        super( region );
    }

    public ScaledTiledDrawable( TextureRegionDrawable drawable ){

        super( drawable );
    }

    public Vector2 getScale() {

        return scale;
    }

    @Override
    public void draw( Batch batch, float x, float y, float width, float height ) {

        oldMatrix.set( batch.getTransformMatrix() );
        matrix.set( transform.setToTrnScl( x, y, scale.x, scale.y ) );

        batch.setTransformMatrix( matrix );

        super.draw( batch, 0, 0, width / scale.x, height / scale.y );

        batch.setTransformMatrix( oldMatrix );
    }
}

以上是关于如何设置平铺drawable的大小的主要内容,如果未能解决你的问题,请参考以下文章

如何实现让平铺的背景图片随着浏览器窗口的大小改变而改变?

循环平铺。如何选择块大小?

Android设置背景图片平铺

word中背景图片大小如何调整

如何设置网页的背景图片不重复不平铺?

Android Compose - 如何平铺/重复位图/矢量?