2016-05-18 5 views
1

私は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バックグラウンドの境界。だから私はどのように正しいサイズを取得するのですか?

ご協力いただきありがとうございます。

答えて

1

おっと。それを解決しました。私は、ラベルを含むセルがNinePatchの背景によってオフセットされ、サイズが変更されると思ったが、それはフルサイズではあるがパディングがある。したがって答えはです。

labelCellWidth = getWidth()-getPadLeft()-getPadRight(); 
関連する問題