高仿 WIN8系统 磁贴点击下沉倾斜效果(selector神马都是浮云了

demo中的图片皆来自 ‘冷笑话精选’,应用链接 冷笑话精选2.1版本。新UI。新体验。大家瞧瞧

效果描述:点击图片中央区域下沉,放手回到原来的位置。点击旁边区域图片绕对应轴倾斜。
效果图():
          
效果APK: TestRolateAnim.apk(221.35 KB, 下载次数: 446)
源码: 按钮点击WIN8 磁贴效果.zip(667.37 KB, 下载次数: 3994)

原理:重写ImageView,捕捉onTouchEvent事件进行Bitmap的处理
缩放处理:
  1.         private synchronized void BeginScale(Matrix matrix, float scale) {
  2.                 int scaleX = (int) (vWidth * 0.5f);
  3.                 int scaleY = (int) (vHeight * 0.5f);
  4.                 matrix.postScale(scale, scale, scaleX, scaleY);
  5.                 setImageMatrix(matrix);
  6.         }
复制代码
绕轴旋转处理:

  1.         private synchronized void BeginRolate(Matrix matrix, float rolateX,
  2.                         float rolateY) {
  3.                 // Bitmap bm = getImageBitmap();
  4.                 int scaleX = (int) (vWidth * 0.5f);
  5.                 int scaleY = (int) (vHeight * 0.5f);
  6.                 camera.save();
  7.                 camera.rotateX(RolateY > 0 ? rolateY : -rolateY);
  8.                 camera.rotateY(RolateX < 0 ? rolateX : -rolateX);
  9.                 camera.getMatrix(matrix);
  10.                 camera.restore();
  11.                 // 控制中心点
  12.                 if (RolateX > 0 && rolateX != 0) {
  13.                         matrix.preTranslate(-vWidth, -scaleY);
  14.                         matrix.postTranslate(vWidth, scaleY);
  15.                 } else if (RolateY > 0 && rolateY != 0) {
  16.                         matrix.preTranslate(-scaleX, -vHeight);
  17.                         matrix.postTranslate(scaleX, vHeight);
  18.                 } else if (RolateX < 0 && rolateX != 0) {
  19.                         matrix.preTranslate(-0, -scaleY);
  20.                         matrix.postTranslate(0, scaleY);
  21.                 } else if (RolateY < 0 && rolateY != 0) {
  22.                         matrix.preTranslate(-scaleX, -0);
  23.                         matrix.postTranslate(scaleX, 0);
  24.                 }
  25.                 setImageMatrix(matrix);
  26.         }
复制代码
其中:matrix.preTranslate(-vWidth, -scaleY);matrix.postTranslate(vWidth, scaleY);为确定绕轴中心点位置,很重要。

关于BUG:诸多BUG 可以通过添加boolean标签解决,可以自行调试。哈哈
PS:给个好评呗。多发发好帖
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值