使用android画布的save()和restore()方法

在调用画布的save()方法之后,可以对画布进行平移、旋转等操作,

然后再将需要画的内容draw到画布上去,

最后再调用restore()方法,恢复到调用save()方法之前的状态。

  
    
1 public class SubView extends TextView { 2 3 public SubView(Context context, AttributeSet attrs) { 4 super (context, attrs); 5 } 6 7 protected void onDraw(android.graphics.Canvas canvas) { 8 int px = getMeasuredWidth(); 9 int py = getMeasuredHeight(); 10 11 Paint backgroundPaint = new Paint(); 12 backgroundPaint.setColor(Color.CYAN); 13 canvas.drawRect( 0 , 0 , px, py, backgroundPaint); 14 15 canvas.save(); 16 // 顺时针旋转180度 17 canvas.rotate( 180 , px / 2 , py / 2 ); 18 19 Paint linePaint = new Paint(); 20 linePaint.setColor(Color.RED); 21 22 canvas.drawLine(px / 2 , 0 , 0 , py / 2 , linePaint); 23 canvas.drawLine(px / 2 , 0 , px, py / 2 , linePaint); 24 canvas.drawLine(px / 2 , 0 , px / 2 , py, linePaint); 25 26 // 恢复到调用save()方法之前的状态 27 // 即没有顺时针旋转180度 28 canvas.restore(); 29 30 canvas.drawCircle(px - 20 , py - 20 , 20 , linePaint); 31 }; 32 }

在这个例子中,调用save()方法之后,将画布进行顺时针旋转了180度,画了三条线段,

然后调用restore()方法恢复到顺时针旋转180度之前,再画一个实心圆。

布局文件内容:

  
    
1 < RelativeLayout xmlns:android ="http://schemas.android.com/apk/res/android" 2 xmlns:tools ="http://schemas.android.com/tools" 3 android:layout_width ="match_parent" 4 android:layout_height ="match_parent" > 5 6 < com.example.test.SubView 7 android:layout_margin ="20dip" 8 android:layout_width ="fill_parent" 9 android:layout_height ="fill_parent" 10 android:layout_centerHorizontal ="true" 11 android:layout_centerVertical ="true" 12 tools:context =".MainActivity" /> 13 14 </ RelativeLayout >

程序运行之后的屏幕截图:

image

你可能感兴趣的:(android)