如何实现局部刷新?我用了invalidate(Rect dirty)还是全局刷新。。。

JackBurd JackBurd 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
从MFC到现在的Android,这个invalidate实现局部刷新的我就没成功过,不知道到底该怎么弄,知道的不吝赐教。我的重绘是在子View的OnDraw里实现的。要么是全局刷新,要么就把上次画布上的所有图都清除了。部分代码如下:
public void onDraw(Canvas canvas) {

super.onDraw(canvas);

int images[][] = MainActivity.images;
int number = images.length;
int canvasWidth = canvas.getWidth();
int imageWidth = canvasWidth / number;
Bitmap bmp = BitmapFactory.decodeResource(getResources(), images[0][0]);
int srcWidth = bmp.getWidth();
float scale = (float) imageWidth / srcWidth;

if (!isStarted) {

canvas.drawColor(Color.WHITE);

for (int i = 0; i < number; i++) {
for (int j = 0; j < number; j++) {
Random rand = new Random();
Bitmap srcBmp = BitmapFactory.decodeResource(
getResources(), images[rand.nextInt(number)][0]);

Matrix matrix = new Matrix();
matrix.postScale(scale, scale);
Bitmap dstBmp = Bitmap
.createBitmap(srcBmp, 0, 0, srcBmp.getWidth(),
srcBmp.getHeight(), matrix, true);

canvas.drawBitmap(dstBmp, i * imageWidth, j * imageWidth,
null);
}
}

//isStarted = true; //加上的话就只执行一次,下次刷新图就都没了;不加的话每次都是全局刷新,相当于重新加载了
//我想要的效果是第一次完全加载,以后就是局部刷新。
}
else
{
if(isTouched)
{

}
}
}


外部调用:
Rect DrawRect = new Rect(srcPosition.x*imageWidth, srcPosition.y*imageWidth,
tarPosition.x*imageWidth, tarPosition.y*imageWidth);

touchView.invalidate(DrawRect);
...全文

相关推荐

评论 5
收藏 已收藏
分享
返回顶部
JackBurd
J2ME 13,096 成员 26,491 内容