我一直在尝试创建一个自定义视图,用于指示专有设备的电池电量。
因此,当读取设备的电池电量时,在自定义视图上调用方法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个图像视图 - 但是没有任何改变,视图本身似乎是空的。
答案 0 :(得分: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);
}
答案 1 :(得分:0)
我认为使用带有自定义可绘制背景的简单视图会更容易,并根据百分比不同地渲染背景。或者为什么不使用ProgressBar?