私はImageTextButtonをコンテナテーブル内に持っています。私は動的にこのテーブルの幅を変更し、ImageTextButtons特定の方法で応答したいと思います。私が彼らにして欲しいのは、表示されるテキストのパーセンテージに応じて、ラベルテキストを消していくことです。LibGDX - ImageTextButtonのラベルセルの幅を取得
テーブルの幅と内容を正しく設定していると思います。 LibGDXドキュメントのとおり、ウィジェットの寸法を明示的に設定するのではなく、表(コンテナ)のセル寸法を明示すべきです。テストのために、私はこのようなボタンのどれにでも簡単なclickListenerを持っています。
button.addListener(new ClickListener(){
@Override
public void clicked(InputEvent event, float x, float y) {
super.clicked(event, x, y);
float max = container.getCell(button).getMaxWidth();
container.getCell(button).width(max*0.9f);
container.invalidate();
}
});
これは問題なく動作します。クリックすると、セル(およびウィジェット)が毎回90%縮小します。
次のステップでは、私のカスタムImageTextButtonのdraw()メソッドで、これと同じくらい簡単だと思いました。
glyphWidth = getLabel().getGlyphLayout().width;
labelCellWidth = getLabelCell().getMinWidth(); ///<--problem here
float glyphOpacityMultiplier = MathUtils.clamp(labelCellWidth/glyphWidth, 0f, 1f);
origLabelColor = getLabel().getColor().cpy();
newLabelColor = origLabelColor.cpy();
newLabelColor = new Color(newLabelColor.r, newLabelColor.g, newLabelColor.b, newLabelColor.a*glyphOpacityMultiplier);
getLabel().setColor(newLabelColor);
super.draw(batch, parentAlpha);
getLabel().setColor(origLabelColor);
これはすべて、ラベルを含むCellの実際の幅を私に与える方法はありません。 ImageTextButton自体もテーブルなので、ClickListenerでもbutton.invalidate()を実行しようとしましたが、それは役に立ちませんでした。これまで私が試した方法です。それらの
getLabelCell().getMinWidth();
getLabelCell().getMaxWidth();
getLabelCell().getPrefWidth();
getLabelCell().getActorWidth();
getLabelCell().getSpaceLeft();
getLabelCell().getSpaceRight();
どれも更新し、私に正しいサイズを与えるように見えるん私はImageTextButtonの「setClipメソッド(真)」をオンにし、ラベルのテキストが正常に内クリッピングされているので、しかし、私は何かがどこかで働いている知っていますサイズ変更時のNinePatchバックグラウンドの境界。だから私はどのように正しいサイズを取得するのですか?
ご協力いただきありがとうございます。