demo中的图片皆来自 ‘冷笑话精选’,应用链接 冷笑话精选2.1版本。新UI。新体验。大家瞧瞧
效果描述:点击图片中央区域下沉,放手回到原来的位置。点击旁边区域图片绕对应轴倾斜。
效果图():
原理:重写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); }其中:matrix.preTranslate(-vWidth, -scaleY);matrix.postTranslate(vWidth, scaleY);为确定绕轴中心点位置,很重要。 转载:http://www.adobex.com/android/source/details/00000214.htm