gpt4 book ai didi

android - 如何编写自定义View的set方法

转载 作者:行者123 更新时间:2023-11-29 01:28:35 25 4
gpt4 key购买 nike

我已经编写了 View 的子类,并且包含了一个设置字段的方法。该字段的值会影响View 的大小和View 的内容。

我必须在 set 方法中写什么才能确保 View 正确更新并立即生效?我问是因为当我使用自己的自定义 View 作为 ListView 项目布局的一部分时,我发现当我尝试使用 convertView 回收自己的 View 时ArrayAdaptergetView 方法的参数,有时 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());
}
}

最佳答案

看来你得打电话

invalidate();
requestLayout();

根据TextView#setCompoundDrawablePadding()的源码,一种影响 View 内容和大小的方法。

关于android - 如何编写自定义View的set方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32509671/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com