属性动画更新时会回调onDraw吗?
时间: 2023-10-04 13:03:23 浏览: 67
属性动画的更新过程不会直接触发 `onDraw()` 方法的回调。`onDraw()` 方法是在 `View` 的绘制过程中被调用的,而属性动画的更新是通过修改属性值并调用 `invalidate()` 方法来触发视图的重绘。
当 `invalidate()` 方法被调用时,会触发视图的重绘,即会执行 `onDraw()` 方法。但这并不是属性动画更新过程中的唯一方式。属性动画的更新是通过修改属性值来实现平滑的动画效果,它会在每一帧更新属性值并调用 `setXXX()` 方法来更新相应的属性。然后,系统会在下一帧绘制时自动调用 `onDraw()` 方法来重新绘制视图,并根据最新的属性值进行绘制。
因此,属性动画的更新会间接地触发 `onDraw()` 方法的回调,通过修改属性值并调用 `invalidate()` 方法来触发视图的重绘。而具体的绘制操作则是在 `onDraw()` 方法中完成的。
相关问题
android view 生命周期回调
Android中View的生命周期回调方法包括:
1. onMeasure(int widthMeasureSpec, int heightMeasureSpec):测量View及其子View的大小,设置View的位置和尺寸。
2. onLayout(boolean changed, int left, int top, int right, int bottom):在ViewGroup中,当子View的位置或大小发生变化时,会调用该方法来重新排列子View的位置。
3. onDraw(Canvas canvas):绘制View的内容。
4. onTouchEvent(MotionEvent event):处理触摸事件。
5. onAttachedToWindow():将View添加到Window上时调用。
6. onDetachedFromWindow():将View从Window上移除时调用。
7. onWindowFocusChanged(boolean hasWindowFocus):View所在的Window获得焦点或失去焦点时调用。
8. onFocusChanged(boolean gainFocus, int direction, Rect previouslyFocusedRect):View获得焦点或失去焦点时调用。
注意:View的生命周期与Activity的生命周期没有直接关联,View的生命周期是在View的内部实现中被调用的。
android onDraw能保持原来已绘制的不再绘制吗
可以通过使用Canvas的save()和restore()方法来保持原来已绘制的内容不再绘制。在save()方法之后进行的绘制操作都会被记录下来,然后通过调用restore()方法可以恢复到save()方法之前的状态,这样就可以保持原来已绘制的内容不再绘制了。具体实现可以参考下面的代码示例:
```
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
// 先绘制一个圆形
Paint paint = new Paint();
paint.setColor(Color.RED);
canvas.drawCircle(100, 100, 50, paint);
// 保存当前状态
canvas.save();
// 绘制一个矩形
paint.setColor(Color.BLUE);
canvas.drawRect(50, 50, 150, 150, paint);
// 恢复之前的状态
canvas.restore();
}
```
在上面的代码中,先绘制了一个红色的圆形,然后通过save()方法保存了当前状态。接着绘制了一个蓝色的矩形,并在最后通过restore()方法恢复了之前的状态,这样就保持了原来已绘制的圆形不再被绘制。