Android Canvas 旋转Rect功能实施

旋转方框功能实现图解


代码实现
1.采用矩阵映射,得到旋转后的功能按钮的新坐标(旋转按钮,删除按钮,缩放按钮)
  //检测点击是否在范围  
    getTouchRect(rotateRect).contains(x1, y1); 

      //得到旋转后按钮点击事件框
      public RectF getTouchRect(RectF rect){
//          System.out.println("处理触摸事件。。。。");
            if(matrix==null){
                  return rect;
            }
          matrix.mapRect(tempRect,rect);
          return tempRect;
      }

2.计算角度
判断三点是顺时针还是逆时针方向

public static double calcAngle(Point cen, Point first, Point second) 
      { 
          final double M_PI = 3.1415926535897  ; 
       
          double ma_x = first.x - cen.x; 
          double ma_y = first.y - cen.y; 
          double mb_x = second.x - cen.x; 
          double mb_y = second.y - cen.y; 
          double v1 = (ma_x * mb_x) + (ma_y * mb_y); 
          double ma_val = Math.sqrt(ma_x * ma_x + ma_y * ma_y); 
          double mb_val = Math.sqrt(mb_x * mb_x + mb_y * mb_y); 
          double cosM = v1 / (ma_val * mb_val); 
          double angleAMB = Math.acos(cosM) * 180 / M_PI; 
         
               
          int v=(cen.x-first.x)*(second.y-cen.y)-(cen.y-first.y)*(second.x-cen.x);
          if(v>0){
//          System.out.println("逆时针");
            return -angleAMB;
          }else if(v<0){
//          System.out.println("顺时针");
          }else{
//          System.out.println("不变");
          }
          return angleAMB; 
      }

3.绘制图形

 @Override

 public void onDraw(Canvas canvas) {
            
            canvas.save();
            canvas.rotate(degree,rect.left+(rect.right-rect.left)/2,rect.top+(rect.bottom-rect.top)/2); //以矩形中心点旋转图形
            canvas.drawRect(rect, paint);
            if(isEdit){             
                  canvas.drawBitmap(deleteIcon, deleteRect.left, deleteRect.top, paint);
                  canvas.drawBitmap(resizeIcon, resizeRect.left, resizeRect.top, paint);
                  canvas.drawBitmap(rotateIcon, rotateRect.left, rotateRect.top, paint);
            }
            canvas.restore();  
 }


  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现Android图片边框旋转,可以使用Canvas旋转绘制矩形的功能。以下是一个简单的代码示例: ```java // 获取图片 Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.image); // 创建一个新的Bitmap,用于绘制旋转后的图像 Bitmap rotatedBitmap = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), bitmap.getConfig()); // 创建Canvas对象,将绘制操作绘制到rotatedBitmap上 Canvas canvas = new Canvas(rotatedBitmap); // 设置旋转角度 float degrees = 45; canvas.rotate(degrees, bitmap.getWidth() / 2, bitmap.getHeight() / 2); // 绘制原始图像 canvas.drawBitmap(bitmap, 0, 0, null); // 绘制矩形边框 Paint paint = new Paint(); paint.setColor(Color.RED); paint.setStyle(Paint.Style.STROKE); paint.setStrokeWidth(5); Rect rect = new Rect(50, 50, bitmap.getWidth() - 50, bitmap.getHeight() - 50); canvas.drawRect(rect, paint); // 将旋转后的图像显示在ImageView上 ImageView imageView = findViewById(R.id.image_view); imageView.setImageBitmap(rotatedBitmap); ``` 在上面的代码中,我们首先获取原始图片,并创建一个新的Bitmap用于绘制旋转后的图像。然后创建Canvas对象,将绘制操作绘制到rotatedBitmap上。接着设置旋转角度,并使用Canvas的drawBitmap方法绘制原始图像。最后,使用Canvas的drawRect方法绘制矩形边框,并将旋转后的图像显示在ImageView上。 注意,在设置旋转角度时,需要将旋转中心点设置为原始图像的中心点,这里我们使用了bitmap.getWidth() / 2和bitmap.getHeight() / 2来计算中心点位置。另外,在绘制矩形边框时,我们使用了Paint对象来设置画笔的颜色、样式和宽度,以及Rect对象来设置矩形的位置和大小。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值