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