自定义视图未正确显示嵌套的ImageView

时间:2013-01-19 13:12:13

标签: android android-custom-view

我一直在尝试创建一个自定义视图,用于指示专有设备的电池电量。

因此,当读取设备的电池电量时,在自定义视图上调用方法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);
    }
}

Caling setPersentage(5)应该显示5个图像视图 - 但是没有任何改变,视图本身似乎是空的。

2 个答案:

答案 0 :(得分:0)

我认为这是因为您使用的LayoutParamsgetHeight()此时返回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);        
    }

答案 1 :(得分:0)

我认为使用带有自定义可绘制背景的简单视图会更容易,并根据百分比不同地渲染背景。或者为什么不使用ProgressBar?