概述
- SurfaceView允许在子线程中绘图,View只能在主线程中执行绘图。
- SurfaceView放在最底层的视图层中,其它视图层都在它上面,而且它不能是透明的。
- 它执行动画的效率比View高,而且你可以控制帧数。
- 因为它的定义和使用比View复杂,占用的资源也比较多,除非使用View不能完成,再用SurfaceView否则最好用View就可以。(贪吃蛇,俄罗斯方块,棋牌类这种帧数比较低的可以使用View做就好)。
自定义View
AnimateViewActivity.java:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(new AnimateView(this));
}
AnimateView.java:
public class AnimateView extends View {
private float radius = 10;
private Paint paint;
public AnimateView(Context context) {
super(context);
paint = new Paint();
paint.setColor(Color.RED);
paint.setStyle(Paint.Style.STROKE);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.translate(200,200);
canvas.drawCircle(0,0,radius++,paint);
if(radius>100){
radius = 10;
}
invalidate();
}
}
运行上面的Activity,你将看到一个圆圈,它原始半径是10,然后不断的变大,直到达到100后又恢复到10,这样循环显示,视觉效果上说你将看到一个逐渐变大的圆圈。它能做的只是简单的动画效果,具有一些局限性。首先你无法控制动画的显示速度,目前它是以最快的 速度显示