如何实现局部刷新?我用了invalidate(Rect dirty)还是全局刷新。。。
从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);
...全文
相关推荐
Android View刷新机制实例分析
`View.invalidate()`方法:这是触发视图刷新的关键步骤。`invalidate()`会标记当前View为“脏”(DIRTY),意味着它需要重新绘制。
Android 优化之卡顿优化的实现
自定义 View 可以使用 invalidate(Rect dirty) 或 invalidate(int left, int top, int right, int bottom) 方法。
Android中View绘制流程以及invalidate()等相关方法分析
"Android系统中,View的绘制流程是一个复杂且关键的过程,涉及到视图的测量、布局和绘制三个核心步骤。此过程主要在ViewRootImpl类的performTraversals()函数中执行,
Android-Android开发之自定义View的功能实现详解。教你一步一步学会自定义View
重绘优化:避免不必要的onDraw调用,如使用 invalidate(Rect dirty) 仅重绘指定区域。2. 测量优化:合理设置MeasureSpec,避免过度测量。3.
使用InvalidateRect(rect) 防止图片移动时发生闪烁
Invalidate(); 执行时,是先用背景刷清屏以后,再重新绘画 InvalidateRect(rect), 他执行时, rect区域以背景刷清屏,rect以外的区域不调用背景刷,而是将屏幕上现有的内容(如图片图形等)作为背景,在这个背景上直接画图。 若是


J2ME
