Canvas.rotate与clipRect的应用

其功能是将画布进行旋转,达到画布上的图像成旋转的效果。

1. 利用clipRect功能是建立一个裁剪区,

2. 保存canvas状态

3. 将该裁剪区进行旋转

4. 进行画布上的操作(必须在3之后)

5. 恢复canvas状态

 

注意:在做显示的Canvas中进行裁剪时,你的显示区域将是你的裁剪区域

 

效果图:

 

 

 

 

Java代码  收藏代码
  1. public class ClipRotateView extends View implements Runnable {  
  2.   
  3.     Paint paint;  
  4.     float rote = 0f;  
  5.   
  6.     public ClipRotateView(Context context) {  
  7.         super(context);  
  8.         paint = new Paint();  
  9.         paint.setAntiAlias(true);  
  10.         new Thread(this).start();  
  11.     }  
  12.   
  13.     @Override  
  14.     protected void onDraw(Canvas canvas) {  
  15.         super.onDraw(canvas);  
  16.         if (canvas == null)  
  17.             canvas = new Canvas();  
  18.         canvas.drawColor(Color.DKGRAY);  
  19.         paint.setColor(Color.RED);  
  20.         // 建立裁剪区域,该处决定了可以显示的内容,  
  21.         // 当处理图片时,可以只裁剪部分区域,这里是为了把当前画布的的内容都显示出来  
  22.         // 所以裁剪全部  
  23.         canvas.clipRect(00, getWidth(), getHeight());  
  24.         // 操作之前进行画布状态的保存  
  25.         canvas.save();  
  26.         //旋转画面,必须放在画矩形之前  
  27.         // canvas.rotate(rote),则是绕(0,0)旋转  
  28.         canvas.rotate(rote, 100100);  
  29.         //画矩形  
  30.         canvas.drawRect(100100200150, paint);  
  31.         // 操作完成之后进行恢复  
  32.         canvas.restore();  
  33.         //画另外两个图形  
  34.         paint.setColor(Color.BLUE);  
  35.         canvas.drawRect(180,100280,150, paint);  
  36.         paint.setColor(Color.GREEN);  
  37.         Path path = new Path();  
  38.         path.moveTo(100280);  
  39.         path.lineTo(100 + 50280);  
  40.         path.lineTo(100 + 30280 + 50);  
  41.         path.lineTo(100 + 20280 + 50);  
  42.         path.close();  
  43.         canvas.drawPath(path, paint);  
  44.   
  45.     }  
  46.   
  47.     // 进行360度的旋转  
  48.     @Override  
  49.     public void run() {  
  50.         while (!Thread.currentThread().isInterrupted()) {  
  51.             try {  
  52.                 if (rote > 360) {  
  53.                     rote = 0;  
  54.                 } else {  
  55.                     rote += 5;  
  56.                 }  
  57.                 Thread.sleep(100);  
  58.             } catch (InterruptedException e) {  
  59.                 e.printStackTrace();  
  60.             }  
  61.             postInvalidate();  
  62.         }  
  63.     }  
  64.   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值