@Override protected boolean setFrame(int l, int t, int r, int b) { Matrix matrix = getImageMatrix(); float scaleFactor = getWidth()/(float)getDrawable().getIntrinsicWidth(); matrix.setScale(scaleFactor, scaleFactor, 0, 0); setImageMatrix(matrix); return super.setFrame(l, t, r, b); }
public void setZoom(float scaleX, float scaleY, Matrix outputMatrix) { outputMatrix.reset(); outputMatrix.set(mMatrixTouch); outputMatrix.setScale(scaleX, scaleY); }
/** * Sets the scale factor to the specified values. x and y is pivot. * * @param scaleX * @param scaleY * @param x * @param y * @return */ public Matrix setZoom(float scaleX, float scaleY, float x, float y) { Matrix save = new Matrix(); save.set(mMatrixTouch); save.setScale(scaleX, scaleY, x, y); return save; }
private void updateShaderMatrix() { float scale; float dx = 0; float dy = 0; mShaderMatrix.set(null); if (mBitmapWidth * mDrawableRect.height() > mDrawableRect.width() * mBitmapHeight) { scale = mDrawableRect.height() / (float) mBitmapHeight; dx = (mDrawableRect.width() - mBitmapWidth * scale) * 0.5f; } else { scale = mDrawableRect.width() / (float) mBitmapWidth; dy = (mDrawableRect.height() - mBitmapHeight * scale) * 0.5f; } mShaderMatrix.setScale(scale, scale); mShaderMatrix.postTranslate((int) (dx + 0.5f) + mDrawableRect.left, (int) (dy + 0.5f) + mDrawableRect.top); mBitmapShader.setLocalMatrix(mShaderMatrix); }
public void setImage(Bitmap bm){ if(mBitmap != bm){ mBitmap = bm; if(mBitmap != null) { mBitmapShader = new BitmapShader(mBitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP); mMatrix.reset(); float scale = mHeight / (float)Math.min(mBitmap.getWidth(), mBitmap.getHeight()); mMatrix.setScale(scale, scale, 0, 0); mMatrix.postTranslate((mHeight - mBitmap.getWidth() * scale) / 2, (mHeight - mBitmap.getHeight() * scale) / 2); mBitmapShader.setLocalMatrix(mMatrix); } } }
private void updateMatrix(){ if(mBitmap == null) return; Rect bounds = getBounds(); if(bounds.width() == 0 || bounds.height() == 0) return; mMatrix.reset(); float scale = bounds.height() / (float)Math.min(mBitmap.getWidth(), mBitmap.getHeight()); mMatrix.setScale(scale, scale, 0, 0); mMatrix.postTranslate((bounds.height() - mBitmap.getWidth() * scale) / 2, (bounds.height() - mBitmap.getHeight() * scale) / 2); mBitmapShader.setLocalMatrix(mMatrix); }
@Override protected void onBoundsChange(Rect bounds) { super.onBoundsChange(bounds); RadialGradient vignette = new RadialGradient( mRect.centerX(), mRect.centerY() * 1.0f / 0.7f, mRect.centerX() * 1.3f, new int[]{0, 0, 0x7f000000}, new float[]{0.0f, 0.7f, 1.0f}, Shader.TileMode.CLAMP); Matrix oval = new Matrix(); oval.setScale(1.0f, 0.7f); vignette.setLocalMatrix(oval); paint.setShader(new ComposeShader(bitmapShader, vignette, PorterDuff.Mode.SRC_OVER)); } }
private void updateMatrix(){ if(mBitmap == null) return; Rect bounds = getBounds(); if(bounds.width() == 0 || bounds.height() == 0) return; mMatrix.reset(); float scale = bounds.height() / (float)Math.min(mBitmap.getWidth(), mBitmap.getHeight()); mMatrix.setScale(scale, scale, 0, 0); mMatrix.postTranslate(bounds.exactCenterX() - mBitmap.getWidth() * scale / 2, bounds.exactCenterY() - mBitmap.getHeight() * scale / 2); mBitmapShader.setLocalMatrix(mMatrix); }
public static List<Path> transformScale(float ratioWidth, float ratioHeight, List<Path> originPaths, List<String> orginSvgs) { Matrix matrix = new Matrix(); matrix.setScale(ratioWidth, ratioHeight); List<Path> paths = new ArrayList<>(); if (Build.VERSION.SDK_INT > 16) { for (Path path : originPaths) { Path nPath = new Path(); path.transform(matrix, nPath); paths.add(nPath); } } else { for (String svgPath : orginSvgs) { Path path = new Path(); PathDataNode[] nodes = createNodesFromPathData(svgPath); transformScaleNodes(ratioWidth, ratioHeight, nodes); PathDataNode.nodesToPath(nodes, path); paths.add(path); } } return paths; }
public void setScale(float scale, float focalX, float focalY, boolean animate) { // Check to see if the scale is within bounds if (scale < mMinScale || scale > mMaxScale) { throw new IllegalArgumentException("Scale must be within the range of minScale and maxScale"); } if (animate) { mImageView.post(new AnimatedZoomRunnable(getScale(), scale, focalX, focalY)); } else { mSuppMatrix.setScale(scale, scale, focalX, focalY); checkAndDisplayMatrix(); } }
@Test public void testInitializeMatrixSetsScaleIfFlipHorizontal() { Matrix matrix = mock(Matrix.class); TransformationUtils .initializeMatrixForRotation(ExifInterface.ORIENTATION_FLIP_HORIZONTAL, matrix); verify(matrix).setScale(-1, 1); }
@Test public void set_shouldOverrideValues(){ final Matrix matrix1 = new Matrix(); matrix1.setScale(1, 2); final Matrix matrix2 = new Matrix(); matrix2.setScale(3, 4); matrix2.set(matrix1); final ShadowMatrix shadow = shadowOf(matrix2); assertThat(shadow.getSetOperations().get("scale")).isEqualTo("1.0 2.0"); }
switch (exifOrientation) { case ExifInterface.ORIENTATION_FLIP_HORIZONTAL: matrix.setScale(-1, 1); break; case ExifInterface.ORIENTATION_ROTATE_180:
@Test public void testSetScale() { final Matrix matrix = new Matrix(); matrix.setScale(2.0f, 2.0f); assertPointsEqual(mapPoint(matrix, 1.0f, 1.0f), new PointF(2.0f, 2.0f)); matrix.setScale(-2.0f, -3.0f); assertPointsEqual(mapPoint(matrix, 2.0f, 3.0f), new PointF(-4.0f, -9.0f)); matrix.setScale(-2.0f, -3.0f, 1.0f, 1.0f); assertPointsEqual(mapPoint(matrix, 2.0f, 3.0f), new PointF(-1.0f, -5.0f)); }
@Test public void set_whenNull_shouldReset() { final Matrix matrix1 = new Matrix(); matrix1.setScale(1, 2); final Matrix matrix2 = new Matrix(); matrix2.set(matrix1); matrix2.set(null); final ShadowMatrix shadow = shadowOf(matrix2); assertThat(shadow.getSetOperations()).isEmpty(); }
@Test public void testPostTranslate() { final Matrix matrix1 = new Matrix(); matrix1.postTranslate(1.0f, 1.0f); assertPointsEqual(mapPoint(matrix1, 1.0f, 1.0f), new PointF(2.0f, 2.0f)); matrix1.postTranslate(2.0f, 2.0f); assertPointsEqual(mapPoint(matrix1, 1.0f, 1.0f), new PointF(4.0f, 4.0f)); final Matrix matrix2 = new Matrix(); matrix2.setScale(2.0f, 2.0f); matrix2.postTranslate(-5.0f, 10.0f); assertPointsEqual(mapPoint(matrix2, 1.0f, 1.0f), new PointF(-3.0f, 12.0f)); }
@Test public void setScale_shouldAddOpsToMatrix() { final Matrix matrix = new Matrix(); matrix.setScale(1, 2, 3, 4); final ShadowMatrix shadow = shadowOf(matrix); assertThat(shadow.getSetOperations().get("scale")).isEqualTo("1.0 2.0 3.0 4.0"); }
@Test public void testSetConcat() { final Matrix scaleMatrix = new Matrix(); scaleMatrix.setScale(2.0f, 3.0f); final Matrix translateMatrix = new Matrix(); translateMatrix.postTranslate(5.0f, 7.0f); final Matrix matrix = new Matrix(); matrix.setConcat(translateMatrix, scaleMatrix); assertPointsEqual(mapPoint(matrix, 2.0f, 2.0f), new PointF(9.0f, 13.0f)); final Matrix rotateMatrix = new Matrix(); rotateMatrix.postRotate(90.0f); matrix.setConcat(rotateMatrix, matrix); assertPointsEqual(mapPoint(matrix, 2.0f, 2.0f), new PointF(-13.0f, 9.0f)); }
@Test public void set_shouldAddOpsToMatrix() { final Matrix matrix = new Matrix(); matrix.setScale(1, 1); matrix.preScale(2, 2, 2, 2); matrix.postScale(3, 3, 3, 3); final ShadowMatrix shadow = shadowOf(matrix); assertThat(shadow.getSetOperations().get("scale")).isEqualTo("1.0 1.0"); assertThat(shadow.getPreOperations().get(0)).isEqualTo("scale 2.0 2.0 2.0 2.0"); assertThat(shadow.getPostOperations().get(0)).isEqualTo("scale 3.0 3.0 3.0 3.0"); }
@Test public void testPreTranslate() { final Matrix matrix1 = new Matrix(); matrix1.preTranslate(1.0f, 1.0f); assertPointsEqual(mapPoint(matrix1, 1.0f, 1.0f), new PointF(2.0f, 2.0f)); matrix1.preTranslate(2.0f, 2.0f); assertPointsEqual(mapPoint(matrix1, 1.0f, 1.0f), new PointF(4.0f, 4.0f)); final Matrix matrix2 = new Matrix(); matrix2.setScale(2.0f, 2.0f); matrix2.preTranslate(-5.0f, 10.0f); assertPointsEqual(mapPoint(matrix2, 1.0f, 1.0f), new PointF(-8.0f, 22.0f)); }