【发布时间】:2015-09-10 18:55:51
【问题描述】:
我编写了View 的子类,并且包含了一个设置字段的方法。该字段的值会影响View 的大小和View 的内容。
我必须在set 方法中写什么以确保视图将立即正确更新?我问是因为当我使用自己的自定义视图作为ListView 项目布局的一部分时,我发现当我尝试使用ArrayAdapter 的@987654328 的convertView 参数来回收我自己的视图时@ 方法,有时set 方法似乎不起作用。
这是我正在尝试做的事情的人为示例。我才刚刚开始学习如何扩展View,所以这段代码可能还有其他问题。
public final class SpotsView extends View {
private final MyActivity activity;
private int numberOfSpots;
public SpotsView(MyActivity activity) {
super(activity);
this.activity = activity;
}
public void setNumberOfSpots(int numberOfSpots) {
this.numberOfSpots = numberOfSpots;
// What do I have to write here?? invalidate()? forceLayout()?
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
Resources resources = activity.getResources();
setMeasuredDimension(
(int) (numberOfSpots * resources.getDimension(R.dimen.block_width)),
(int) resources.getDimension(R.dimen.spots_view_height)
);
}
@Override
protected void onDraw(Canvas canvas) {
int height = getHeight();
int width = getWidth();
float radius = activity.getResources().getDimension(R.dimen.network_outer_radius);
for (int i = 0; i < numberOfSpots; i++)
canvas.drawCircle((i + 0.5F) * (width / numberOfSpots), height * 0.5F, radius, activity.spotPaint());
}
}
【问题讨论】:
标签: android android-view