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); 

我加在各方面的额外像素只是重叠的圆位,以确保整个区域无效。根据我的经验,看起来您可以包含负值或超过画布尺寸的值。

+0

好吧,这很有用,非常感谢,现在我有更多的问题。 1.在那个圈子里,我用canvas.drawText创建了文本女巫,所以这个重绘和那个文本。 2.当创建图像与canvas.drawBitmap(位图100,100,油漆)如何定义图像的宽度和高度怎么办它位图对象或我可以在canvas.drawBitmap做 感谢 – Kec

+0

数目:1 )如果您在包含LinearLayout中执行invalidate,则属于invalidate矩形内的文本将被重新绘制。 2)有几个版本的canvas.drawBitmap。您提到的版本使用位图对象的宽度/高度。如果您希望Canvas在绘制时将位图缩放到不同的大小,请尝试使用public void drawBitmap(位图位图,Rect src,Rect dst,Paint paint)。 – mportuesisf

+0

谢谢,我会尝试这种方式 – Kec