0

独自のデバイスのバッテリー レベルを示すために使用するカスタム ビューを作成しようとしています。

したがって、デバイスのバッテリー レベルが読み取らsetPercentage(int batteryLevel)れると、カスタム ビューでメソッドが呼び出されます。

問題は、設定した値に関係なく、カスタム ビューで何も変更されないように見えることです。

クラスは次のとおりです。

public class RectangleView extends LinearLayout {
    private ArrayList<ImageView> views = new ArrayList<ImageView>();

    public RectangleView(Context context, AttributeSet attributeSet) {
        super(context, attributeSet);
        init(context);
    }

    public RectangleView(Context context) {
        super(context);
        init(context);
    }

    private void init(Context context) {
        this.setOrientation(LinearLayout.HORIZONTAL);
        for (int i = 0; i < 10; i++) {
            ImageView loadingPiece = new ImageView(context);
            loadingPiece.setBackgroundColor(Color.BLACK);
            this.addView(loadingPiece);
            LayoutParams layoutParams = (LayoutParams)loadingPiece.getLayoutParams();
            layoutParams.weight = 1.0f;
            layoutParams.height = this.getHeight();
            layoutParams.width = 0;
            loadingPiece.setLayoutParams(layoutParams);
            views.add(loadingPiece);
        }
    }

    public void setPercentage(int amountToShow) {
        for (int i = 0; i < views.size(); i++) 
            if (i < amountToShow)
                views.get(i).setVisibility(View.VISIBLE);
            else
                views.get(i).setVisibility(View.INVISIBLE);
    }
}

setPersentage(5) を呼び出すと、5 つのイメージビューが表示されるはずですが、何も変更されておらず、ビュー自体が空のように見えます。

4

2 に答える 2

0

私はLayoutParamsあなたが使った(その瞬間getHeight()に戻る)ためにそれが起こると思います。0これが違いを生むかどうかを確認してください:

    this.setOrientation(LinearLayout.HORIZONTAL);
    for (int i = 0; i < 10; i++) {
        ImageView loadingPiece = new ImageView(context);
        loadingPiece.setBackgroundColor(Color.BLACK);
        LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(0,
            LinearLayout.LayoutParams.FILL_PARENT, 1.0f);
        this.addView(loadingPiece, lp);   
        views.add(loadingPiece);        
    }
于 2013-01-19T13:18:49.793 に答える
0

背景用のカスタム ドローアブルを備えた単純なビューを使用し、パーセンテージに応じてその背景を異なる方法でレンダリングする方が簡単だと思います。または、なぜ ProgressBar を使用しないのでしょうか?

于 2013-01-19T13:27:22.333 に答える