demo中的图片皆来自 ‘冷笑话精选’,应用链接
冷笑话精选2.1版本。新UI。新体验。大家瞧瞧
效果描述:点击图片中央区域下沉,放手回到原来的位置。点击旁边区域图片绕对应轴倾斜。
效果图():
效果APK: TestRolateAnim.apk(221.35 KB, 下载次数: 446)
源码: 按钮点击WIN8 磁贴效果.zip(667.37 KB, 下载次数: 3994)
原理:重写ImageView,捕捉onTouchEvent事件进行Bitmap的处理
缩放处理:
复制代码
绕轴旋转处理:
复制代码
其中:matrix.preTranslate(-vWidth, -scaleY);matrix.postTranslate(vWidth, scaleY);为确定绕轴中心点位置,很重要。
关于BUG:诸多BUG 可以通过添加boolean标签解决,可以自行调试。哈哈
PS:给个好评呗。多发发好帖
效果描述:点击图片中央区域下沉,放手回到原来的位置。点击旁边区域图片绕对应轴倾斜。
效果图():
效果APK: TestRolateAnim.apk(221.35 KB, 下载次数: 446)
源码: 按钮点击WIN8 磁贴效果.zip(667.37 KB, 下载次数: 3994)
原理:重写ImageView,捕捉onTouchEvent事件进行Bitmap的处理
缩放处理:
- private synchronized void BeginScale(Matrix matrix, float scale) {
- int scaleX = (int) (vWidth * 0.5f);
- int scaleY = (int) (vHeight * 0.5f);
- matrix.postScale(scale, scale, scaleX, scaleY);
- setImageMatrix(matrix);
- }
- private synchronized void BeginRolate(Matrix matrix, float rolateX,
- float rolateY) {
- // Bitmap bm = getImageBitmap();
- int scaleX = (int) (vWidth * 0.5f);
- int scaleY = (int) (vHeight * 0.5f);
- camera.save();
- camera.rotateX(RolateY > 0 ? rolateY : -rolateY);
- camera.rotateY(RolateX < 0 ? rolateX : -rolateX);
- camera.getMatrix(matrix);
- camera.restore();
- // 控制中心点
- if (RolateX > 0 && rolateX != 0) {
- matrix.preTranslate(-vWidth, -scaleY);
- matrix.postTranslate(vWidth, scaleY);
- } else if (RolateY > 0 && rolateY != 0) {
- matrix.preTranslate(-scaleX, -vHeight);
- matrix.postTranslate(scaleX, vHeight);
- } else if (RolateX < 0 && rolateX != 0) {
- matrix.preTranslate(-0, -scaleY);
- matrix.postTranslate(0, scaleY);
- } else if (RolateY < 0 && rolateY != 0) {
- matrix.preTranslate(-scaleX, -0);
- matrix.postTranslate(scaleX, 0);
- }
- setImageMatrix(matrix);
- }
关于BUG:诸多BUG 可以通过添加boolean标签解决,可以自行调试。哈哈
PS:给个好评呗。多发发好帖