android如何调用invalidate(Rect)
问题描述:
我创建了一个扩展LinerLayout的类,并在视图中添加了很多元素,同时我还添加了圈为 etc canvas.drawCircle(100,100,10),当我实现onTouchEvent时我不确定如何仅重绘该元素(圆形)。哪些参数在“Rect”中设置,以便我可以将其发送到无效(Rect)。android如何调用invalidate(Rect)
谢谢。
答
对于具体的例子,我觉得这个代码示例你想要做什么。我将你的坐标移动到变量(cx,cy,r)中,只是为了说清楚。根据你所提到的,我想你会在你的LinearLayout子类中调用它。
int cx = 100;
int cy = 100;
int r = 10;
canvas.DrawCircle(cx, cy, r);
int l = cx - r - 1;
int t = cy - r - 1;
int r = cx + r + 1;
int b = cy + r + 1;
Rect bounds = new Rect(l, t, r, b);
invalidate(bounds);
我加在各方面的额外像素只是重叠的圆位,以确保整个区域无效。根据我的经验,看起来您可以包含负值或超过画布尺寸的值。
好吧,这很有用,非常感谢,现在我有更多的问题。 1.在那个圈子里,我用canvas.drawText创建了文本女巫,所以这个重绘和那个文本。 2.当创建图像与canvas.drawBitmap(位图100,100,油漆)如何定义图像的宽度和高度怎么办它位图对象或我可以在canvas.drawBitmap做 感谢 – Kec
数目:1 )如果您在包含LinearLayout中执行invalidate,则属于invalidate矩形内的文本将被重新绘制。 2)有几个版本的canvas.drawBitmap。您提到的版本使用位图对象的宽度/高度。如果您希望Canvas在绘制时将位图缩放到不同的大小,请尝试使用public void drawBitmap(位图位图,Rect src,Rect dst,Paint paint)。 – mportuesisf
谢谢,我会尝试这种方式 – Kec