class MyView extends View
{
Paint dotPaint;
boolean mContextVariable;
List<Point> points = new ArrayList<Point>();
Point p = new Point();
public MyView(Context context)
{
super(context);
dotPaint = new Paint();
dotPaint.setColor(Color.YELLOW);
}
@Override
protected void onDraw(Canvas canvas)
{
canvas.drawARGB(100, 100, 100, 255);
int xCenter = canvas.getWidth()/2;
int yCenter = canvas.getHeight()/2;
Functions fc = new Functions();
MainActivity layout = new MainActivity();
int coordmax = (fc.countChar(layout, "coordsWalked.pkm", "§") - 1) / 2;
invalidate();
int loop = 1;
while (loop <= coordmax){
int lat = Integer.parseInt(fc.getDataSplit(layout, "coordsWalked.pkm", ((coordmax*2)-1)))+xCenter;
int lng = Integer.parseInt(fc.getDataSplit(layout, "coordsWalked.pkm", ((coordmax*2))))+yCenter;
p.x = lat;
p.y = lng;
points.add(p);
loop++;
}
for(Point p: points){
canvas.drawCircle(p.x, p.y, 10, dotPaint);
invalidate();
}
invalidate();
}
*&#34; coordsWalked.pkm&#34;是一个文本文件,其中有一系列坐标由分割器分隔,因此* 2 - 1是x坐标, 2 - 0是y坐标。不需要太担心,我的所有圆圈都是在正确的坐标上绘制的,因此在正确的位置。
问题是它只在文本文件的最后一个坐标处绘制一个圆圈。我想要的是它为文件中的每一个坐标绘制圆圈并同时显示它们,但它只显示最后一个圆圈。我尝试使用我在网上找到的for(Point p:points)解决方案来解决这个问题,但它仍然和以前完全一样。我也试过调整无效,关闭等等,但没有明显区别。
我已经筛选了大量的答案,但它们都不适合我。他们中的一些人没有工作,因为他们使用不同的方法画出我不理解或不适合我使用的圈子(比如使用surfaceView),而对于其他人我不知道为什么他们不喜欢和#39;工作。我现在的代码部分来自我在网上找到的另一个对我不起作用的答案。
答案 0 :(得分:0)
我检查了关于不调用invalidate()
的答案,并确认调用它确实使之前的图形无效。到现在为止还挺好。这符合您的观察。
但看起来您正在设置自定义视图。之前的讨论提出了答案 - 如果您的真正问题确实是您的onDraw()
方法未被调用。这个答案来自链接:
Why onDraw is not called after invalidate()? [来自RGraham的解决方案]
您需要拨打
setWillNotDraw(false);
才能获得 要调用的onDraw
方法:private void init() { setWillNotDraw(false); ... }
希望这有帮助!欢呼声,