Canvas中clipRect,rotate应用
Canvas.rotate与clipRect的应用
其功能是将画布进行旋转,达到画布上的图像成旋转的效果。
1.利用clipRect功能是建立一个裁剪区,
2.保存canvas状态
3.将该裁剪区进行旋转
4.进行画布上的操作(必须在3之后)
5.恢复canvas状态
?
注意:在做显示的Canvas中进行裁剪时,你的显示区域将是你的裁剪区域
?
效果图:
?
?
?
?
public class ClipRotateView extends View implements Runnable {Paint paint;float rote = 0f;public ClipRotateView(Context context) {super(context);paint = new Paint();paint.setAntiAlias(true);new Thread(this).start();}@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);if (canvas == null)canvas = new Canvas();canvas.drawColor(Color.DKGRAY);paint.setColor(Color.RED);// 建立裁剪区域,该处决定了可以显示的内容,// 当处理图片时,可以只裁剪部分区域,这里是为了把当前画布的的内容都显示出来// 所以裁剪全部canvas.clipRect(0, 0, getWidth(), getHeight());// 操作之前进行画布状态的保存canvas.save();//旋转画面,必须放在画矩形之前// canvas.rotate(rote),则是绕(0,0)旋转canvas.rotate(rote, 100, 100);//画矩形canvas.drawRect(100, 100, 200, 150, paint);// 操作完成之后进行恢复canvas.restore();//画另外两个图形paint.setColor(Color.BLUE);canvas.drawRect(180,100, 280,150, paint);paint.setColor(Color.GREEN);Path path = new Path();path.moveTo(100, 280);path.lineTo(100 + 50, 280);path.lineTo(100 + 30, 280 + 50);path.lineTo(100 + 20, 280 + 50);path.close();canvas.drawPath(path, paint);}// 进行360度的旋转@Overridepublic void run() {while (!Thread.currentThread().isInterrupted()) {try {if (rote > 360) {rote = 0;} else {rote += 5;}Thread.sleep(100);} catch (InterruptedException e) {e.printStackTrace();}postInvalidate();}}}