Java Code Examples for android.graphics.Matrix#MSCALE_X
The following examples show how to use
android.graphics.Matrix#MSCALE_X .
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source File: MatrixImageView.java From LLApp with Apache License 2.0 | 6 votes |
/** * 获取缩放的中心点。 * @param scale * @param values * @return */ private PointF getCenter(float scale,float[] values) { //缩放级别小于原始缩放级别时或者为放大状态时,返回ImageView中心点作为缩放中心点 if(scale*values[Matrix.MSCALE_X]<mScale||scale>=1){ return new PointF(getWidth()/2,getHeight()/2); } float cx=getWidth()/2; float cy=getHeight()/2; //以ImageView中心点为缩放中心,判断缩放后的图片左边缘是否会离开ImageView左边缘,是的话以左边缘为X轴中心 if((getWidth()/2-values[Matrix.MTRANS_X])*scale<getWidth()/2) cx=0; //判断缩放后的右边缘是否会离开ImageView右边缘,是的话以右边缘为X轴中心 if((mImageWidth*values[Matrix.MSCALE_X]+values[Matrix.MTRANS_X])*scale<getWidth()) cx=getWidth(); return new PointF(cx,cy); }
Example 2
Source File: PageImageView.java From bubble with MIT License | 6 votes |
@Override public void run() { float t = (float)(System.currentTimeMillis() - mStartTime) / ZOOM_DURATION; float interpolateRatio = mInterpolator.getInterpolation(t); t = (t > 1f) ? 1f : t; mMatrix.getValues(m); float newScale = mStartScale + interpolateRatio * (mScale - mStartScale); float newScaleFactor = newScale / m[Matrix.MSCALE_X]; mMatrix.postScale(newScaleFactor, newScaleFactor, mX, mY); setImageMatrix(mMatrix); if (t < 1f) { post(this); } else { // set exact scale mMatrix.getValues(m); mMatrix.setScale(mScale, mScale); mMatrix.postTranslate(m[Matrix.MTRANS_X], m[Matrix.MTRANS_Y]); setImageMatrix(mMatrix); } }
Example 3
Source File: TouchImageView.java From social-app-android with Apache License 2.0 | 6 votes |
/** * After rotating, the matrix needs to be translated. This function finds the area of image * which was previously centered and adjusts translations so that is again the center, post-rotation. * * @param axis Matrix.MTRANS_X or Matrix.MTRANS_Y * @param trans the value of trans in that axis before the rotation * @param prevImageSize the width/height of the image before the rotation * @param imageSize width/height of the image after rotation * @param prevViewSize width/height of view before rotation * @param viewSize width/height of view after rotation * @param drawableSize width/height of drawable */ private void translateMatrixAfterRotate(int axis, float trans, float prevImageSize, float imageSize, int prevViewSize, int viewSize, int drawableSize) { if (imageSize < viewSize) { // // The width/height of image is less than the view's width/height. Center it. // m[axis] = (viewSize - (drawableSize * m[Matrix.MSCALE_X])) * 0.5f; } else if (trans > 0) { // // The image is larger than the view, but was not before rotation. Center it. // m[axis] = -((imageSize - viewSize) * 0.5f); } else { // // Find the area of the image which was previously centered in the view. Determine its distance // from the left/top side of the view as a fraction of the entire image's width/height. Use that percentage // to calculate the trans in the new view width/height. // float percentage = (Math.abs(trans) + (0.5f * prevViewSize)) / prevImageSize; m[axis] = -((percentage * imageSize) - (viewSize * 0.5f)); } }
Example 4
Source File: MatrixUtils.java From libcommon with Apache License 2.0 | 6 votes |
/** * android.graphics.Matrixの3x3行列をOpenGLの4x4(列優先)行列に変換する * (アフィン変換のみ) * |a11 a12 a13| |0 1 2| |a11 a12 0 a13| |0 4 8 12| * |a21 a22 a23| |3 4 5| |a21 a22 0 a23| |1 5 9 13| * |a31 a32 a33| |6 7 8| => | 0 0 1 0| |2 6 10 14| * |a31 a32 0 a33| |3 7 11 15| * @param transform * @param result * @return */ @NonNull @Size(min=16) public static float[] toGLMatrix(@NonNull final Matrix transform, @NonNull @Size(min=16) final float[] result, @NonNull @Size(min=9) final float[] aMatrix) { transform.getValues(aMatrix); result[ 0] = aMatrix[Matrix.MSCALE_X]; result[ 1] = aMatrix[Matrix.MSKEW_Y]; result[ 2] = 0; result[ 3] = aMatrix[Matrix.MPERSP_0]; result[ 4] = aMatrix[Matrix.MSKEW_X]; result[ 5] = aMatrix[Matrix.MSCALE_Y]; result[ 6] = 0; result[ 7] = aMatrix[Matrix.MPERSP_1]; result[ 8] = 0; result[ 9] = 0; result[10] = 1; result[11] = 0; result[12] = aMatrix[Matrix.MTRANS_X]; result[13] = aMatrix[Matrix.MTRANS_Y]; result[14] = 0; result[15] = aMatrix[Matrix.MPERSP_2]; return result; }
Example 5
Source File: TouchImageView.java From Ecommerce-Retronight-Android with Creative Commons Zero v1.0 Universal | 6 votes |
/** * After rotating, the matrix needs to be translated. This function finds the area of image * which was previously centered and adjusts translations so that is again the center, post-rotation. * * @param axis Matrix.MTRANS_X or Matrix.MTRANS_Y * @param trans the value of trans in that axis before the rotation * @param prevImageSize the width/height of the image before the rotation * @param imageSize width/height of the image after rotation * @param prevViewSize width/height of view before rotation * @param viewSize width/height of view after rotation * @param drawableSize width/height of drawable */ private void translateMatrixAfterRotate(int axis, float trans, float prevImageSize, float imageSize, int prevViewSize, int viewSize, int drawableSize) { if (imageSize < viewSize) { // // The width/height of image is less than the view's width/height. Center it. // m[axis] = (viewSize - (drawableSize * m[Matrix.MSCALE_X])) * 0.5f; } else if (trans > 0) { // // The image is larger than the view, but was not before rotation. Center it. // m[axis] = -((imageSize - viewSize) * 0.5f); } else { // // Find the area of the image which was previously centered in the view. Determine its distance // from the left/top side of the view as a fraction of the entire image's width/height. Use that percentage // to calculate the trans in the new view width/height. // float percentage = (Math.abs(trans) + (0.5f * prevViewSize)) / prevImageSize; m[axis] = -((percentage * imageSize) - (viewSize * 0.5f)); } }
Example 6
Source File: TouchImageView.java From Secure-Photo-Viewer with MIT License | 6 votes |
/** * After rotating, the matrix needs to be translated. This function finds the area of image * which was previously centered and adjusts translations so that is again the center, post-rotation. * * @param axis Matrix.MTRANS_X or Matrix.MTRANS_Y * @param trans the value of trans in that axis before the rotation * @param prevImageSize the width/height of the image before the rotation * @param imageSize width/height of the image after rotation * @param prevViewSize width/height of view before rotation * @param viewSize width/height of view after rotation * @param drawableSize width/height of drawable */ private void translateMatrixAfterRotate(int axis, float trans, float prevImageSize, float imageSize, int prevViewSize, int viewSize, int drawableSize) { if (imageSize < viewSize) { // // The width/height of image is less than the view's width/height. Center it. // m[axis] = (viewSize - (drawableSize * m[Matrix.MSCALE_X])) * 0.5f; } else if (trans > 0) { // // The image is larger than the view, but was not before rotation. Center it. // m[axis] = -((imageSize - viewSize) * 0.5f); } else { // // Find the area of the image which was previously centered in the view. Determine its distance // from the left/top side of the view as a fraction of the entire image's width/height. Use that percentage // to calculate the trans in the new view width/height. // float percentage = (Math.abs(trans) + (0.5f * prevViewSize)) / prevImageSize; m[axis] = -((percentage * imageSize) - (viewSize * 0.5f)); } }
Example 7
Source File: DragImageView.java From ShareBox with Apache License 2.0 | 5 votes |
/** * 判断是否需要重置 * * @return 当前缩放级别小于模板缩放级别时,重置 */ private boolean checkRest() { // TODO Auto-generated method stub float[] values = new float[9]; getImageMatrix().getValues(values); //获取当前X轴缩放级别 float scale = values[Matrix.MSCALE_X]; //获取模板的X轴缩放级别,两者做比较 mMatrix.getValues(values); return scale < values[Matrix.MSCALE_X]; }
Example 8
Source File: MatrixImageView.java From LLApp with Apache License 2.0 | 5 votes |
/** * 和当前矩阵对比,检验dx,使图像移动后不会超出ImageView边界 * @param values * @param dx * @return */ private float checkDxBound(float[] values,float dx,float dy) { float width=getWidth(); if(!mLeftDragable&&dx<0){ //加入和y轴的对比,表示在监听到垂直方向的手势时不切换Item if(Math.abs(dx)*0.4f>Math.abs(dy)&&mFirstMove){ stopDrag(); } return 0; } if(!mRightDragable&&dx>0){ //加入和y轴的对比,表示在监听到垂直方向的手势时不切换Item if(Math.abs(dx)*0.4f>Math.abs(dy)&&mFirstMove){ stopDrag(); } return 0; } mLeftDragable=true; mRightDragable=true; if(mFirstMove) mFirstMove=false; if(mImageWidth*values[Matrix.MSCALE_X]<width){ return 0; } if(values[Matrix.MTRANS_X]+dx>0){ dx=-values[Matrix.MTRANS_X]; } else if(values[Matrix.MTRANS_X]+dx<-(mImageWidth*values[Matrix.MSCALE_X]-width)){ dx=-(mImageWidth*values[Matrix.MSCALE_X]-width)-values[Matrix.MTRANS_X]; } return dx; }
Example 9
Source File: CoupleChartGestureListener.java From android-kline with Apache License 2.0 | 5 votes |
public void syncCharts() { Matrix srcMatrix; float[] srcVals = new float[9]; Matrix dstMatrix; float[] dstVals = new float[9]; // get src chart translation matrix: srcMatrix = srcChart.getViewPortHandler().getMatrixTouch(); srcMatrix.getValues(srcVals); // apply X axis scaling and position to dst charts: for (Chart dstChart : dstCharts) { dstMatrix = dstChart.getViewPortHandler().getMatrixTouch(); dstMatrix.getValues(dstVals); dstVals[Matrix.MSCALE_X] = srcVals[Matrix.MSCALE_X]; dstVals[Matrix.MSKEW_X] = srcVals[Matrix.MSKEW_X]; dstVals[Matrix.MTRANS_X] = srcVals[Matrix.MTRANS_X]; dstVals[Matrix.MSKEW_Y] = srcVals[Matrix.MSKEW_Y]; dstVals[Matrix.MSCALE_Y] = srcVals[Matrix.MSCALE_Y]; dstVals[Matrix.MTRANS_Y] = srcVals[Matrix.MTRANS_Y]; dstVals[Matrix.MPERSP_0] = srcVals[Matrix.MPERSP_0]; dstVals[Matrix.MPERSP_1] = srcVals[Matrix.MPERSP_1]; dstVals[Matrix.MPERSP_2] = srcVals[Matrix.MPERSP_2]; dstMatrix.setValues(dstVals); dstChart.getViewPortHandler().refresh(dstMatrix, dstChart, true); } }
Example 10
Source File: ViewPortHandler.java From Ticket-Analysis with MIT License | 5 votes |
/** * limits the maximum scale and X translation of the given matrix * * @param matrix */ public void limitTransAndScale(Matrix matrix, RectF content) { matrix.getValues(matrixBuffer); float curTransX = matrixBuffer[Matrix.MTRANS_X]; float curScaleX = matrixBuffer[Matrix.MSCALE_X]; float curTransY = matrixBuffer[Matrix.MTRANS_Y]; float curScaleY = matrixBuffer[Matrix.MSCALE_Y]; // min scale-x is 1f mScaleX = Math.min(Math.max(mMinScaleX, curScaleX), mMaxScaleX); // min scale-y is 1f mScaleY = Math.min(Math.max(mMinScaleY, curScaleY), mMaxScaleY); float width = 0f; float height = 0f; if (content != null) { width = content.width(); height = content.height(); } float maxTransX = -width * (mScaleX - 1f); mTransX = Math.min(Math.max(curTransX, maxTransX - mTransOffsetX), mTransOffsetX); float maxTransY = height * (mScaleY - 1f); mTransY = Math.max(Math.min(curTransY, maxTransY + mTransOffsetY), -mTransOffsetY); matrixBuffer[Matrix.MTRANS_X] = mTransX; matrixBuffer[Matrix.MSCALE_X] = mScaleX; matrixBuffer[Matrix.MTRANS_Y] = mTransY; matrixBuffer[Matrix.MSCALE_Y] = mScaleY; matrix.setValues(matrixBuffer); }
Example 11
Source File: DragImageView.java From ShareBox with Apache License 2.0 | 5 votes |
/** * 和当前矩阵对比,检验dx,使图像移动后不会超出ImageView边界 * * @param values * @param dx * @return */ private float checkDxBound(float[] values, float dx) { float width = getWidth(); if (mImageWidth * values[Matrix.MSCALE_X] < width) return 0; if (values[Matrix.MTRANS_X] + dx > 0) dx = -values[Matrix.MTRANS_X]; else if (values[Matrix.MTRANS_X] + dx < -(mImageWidth * values[Matrix.MSCALE_X] - width)) dx = -(mImageWidth * values[Matrix.MSCALE_X] - width) - values[Matrix.MTRANS_X]; return dx; }
Example 12
Source File: ViewPortHandler.java From JNChartDemo with Apache License 2.0 | 5 votes |
/** * limits the maximum scale and X translation of the given matrix * * @param matrix */ public void limitTransAndScale(Matrix matrix, RectF content) { matrix.getValues(matrixBuffer); float curTransX = matrixBuffer[Matrix.MTRANS_X]; float curScaleX = matrixBuffer[Matrix.MSCALE_X]; float curTransY = matrixBuffer[Matrix.MTRANS_Y]; float curScaleY = matrixBuffer[Matrix.MSCALE_Y]; // min scale-x is 1f mScaleX = Math.min(Math.max(mMinScaleX, curScaleX), mMaxScaleX); // min scale-y is 1f mScaleY = Math.min(Math.max(mMinScaleY, curScaleY), mMaxScaleY); float width = 0f; float height = 0f; if (content != null) { width = content.width(); height = content.height(); } float maxTransX = -width * (mScaleX - 1f); mTransX = Math.min(Math.max(curTransX, maxTransX - mTransOffsetX), mTransOffsetX); float maxTransY = height * (mScaleY - 1f); mTransY = Math.max(Math.min(curTransY, maxTransY + mTransOffsetY), -mTransOffsetY); matrixBuffer[Matrix.MTRANS_X] = mTransX; matrixBuffer[Matrix.MSCALE_X] = mScaleX; matrixBuffer[Matrix.MTRANS_Y] = mTransY; matrixBuffer[Matrix.MSCALE_Y] = mScaleY; matrix.setValues(matrixBuffer); }
Example 13
Source File: ClipViewLayout.java From YiZhi with Apache License 2.0 | 4 votes |
/** * 获得当前的缩放比例 */ public final float getScale() { matrix.getValues(matrixValues); return matrixValues[Matrix.MSCALE_X]; }
Example 14
Source File: MatrixUtils.java From libcommon with Apache License 2.0 | 4 votes |
/** * スキューを考慮して実際の拡大縮小率を取得する * @param mat * @return */ public static float getScale(@NonNull final float[] mat) { final float scaleX = mat[Matrix.MSCALE_X]; final float skewY = mat[Matrix.MSKEW_Y]; return (float) Math.sqrt(scaleX * scaleX + skewY * skewY); }
Example 15
Source File: DefaultZoomableController.java From imsdk-android with MIT License | 4 votes |
/** Gets the current scale factor. */ @Override public float getScaleFactor() { mActiveTransform.getValues(mTempValues); return mTempValues[Matrix.MSCALE_X]; }
Example 16
Source File: BubbleTextView.java From StickerView with MIT License | 4 votes |
@Override protected void onDraw(Canvas canvas) { if (mBitmap != null) { float[] arrayOfFloat = new float[9]; matrix.getValues(arrayOfFloat); float f1 = 0.0F * arrayOfFloat[0] + 0.0F * arrayOfFloat[1] + arrayOfFloat[2]; float f2 = 0.0F * arrayOfFloat[3] + 0.0F * arrayOfFloat[4] + arrayOfFloat[5]; float f3 = arrayOfFloat[0] * this.mBitmap.getWidth() + 0.0F * arrayOfFloat[1] + arrayOfFloat[2]; float f4 = arrayOfFloat[3] * this.mBitmap.getWidth() + 0.0F * arrayOfFloat[4] + arrayOfFloat[5]; float f5 = 0.0F * arrayOfFloat[0] + arrayOfFloat[1] * this.mBitmap.getHeight() + arrayOfFloat[2]; float f6 = 0.0F * arrayOfFloat[3] + arrayOfFloat[4] * this.mBitmap.getHeight() + arrayOfFloat[5]; float f7 = arrayOfFloat[0] * this.mBitmap.getWidth() + arrayOfFloat[1] * this.mBitmap.getHeight() + arrayOfFloat[2]; float f8 = arrayOfFloat[3] * this.mBitmap.getWidth() + arrayOfFloat[4] * this.mBitmap.getHeight() + arrayOfFloat[5]; canvas.save(); //先往文字上绘图 mBitmap = originBitmap.copy(Bitmap.Config.ARGB_8888, true); canvasText.setBitmap(mBitmap); canvasText.setDrawFilter(new PaintFlagsDrawFilter(0, Paint.ANTI_ALIAS_FLAG | Paint.FILTER_BITMAP_FLAG)); canvas.setDrawFilter(new PaintFlagsDrawFilter(0, Paint.ANTI_ALIAS_FLAG | Paint.FILTER_BITMAP_FLAG)); float left = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 15, dm); float scalex = arrayOfFloat[Matrix.MSCALE_X]; float skewy = arrayOfFloat[Matrix.MSKEW_Y]; float rScale = (float) Math.sqrt(scalex * scalex + skewy * skewy); float size = rScale * 0.75f * mDefultSize; if (size > mMaxFontSize) { mFontSize = mMaxFontSize; } else if (size < mMinFontSize) { mFontSize = mMinFontSize; } else { mFontSize = size; } mFontPaint.setTextSize(TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, mFontSize, dm)); String[] texts = autoSplit(mStr, mFontPaint, mBitmap.getWidth() - left * 3); float height = (texts.length * (baseline + fm.leading) + baseline); float top = (mBitmap.getHeight() - height) / 2; //基于底线开始画的 top += baseline; for (String text : texts) { if (TextUtils.isEmpty(text)) { continue; } canvasText.drawText(text, mBitmap.getWidth() / 2, top, mFontPaint); //坐标以控件左上角为原点 top += baseline + fm.leading; //添加字体行间距 } canvas.drawBitmap(mBitmap, matrix, null); //删除在右上角 dst_delete.left = (int) (f3 - deleteBitmapWidth / 2); dst_delete.right = (int) (f3 + deleteBitmapWidth / 2); dst_delete.top = (int) (f4 - deleteBitmapHeight / 2); dst_delete.bottom = (int) (f4 + deleteBitmapHeight / 2); //拉伸等操作在右下角 dst_resize.left = (int) (f7 - resizeBitmapWidth / 2); dst_resize.right = (int) (f7 + resizeBitmapWidth / 2); dst_resize.top = (int) (f8 - resizeBitmapHeight / 2); dst_resize.bottom = (int) (f8 + resizeBitmapHeight / 2); //置顶在左上角 dst_top.left = (int) (f1 - topBitmapWidth / 2); dst_top.right = (int) (f1 + topBitmapWidth / 2); dst_top.top = (int) (f2 - topBitmapHeight / 2); dst_top.bottom = (int) (f2 + topBitmapHeight / 2); //水平镜像在右下角 // dst_flipV.left = (int) (f5 - topBitmapWidth / 2); // dst_flipV.right = (int) (f5 + topBitmapWidth / 2); // dst_flipV.top = (int) (f6 - topBitmapHeight / 2); // dst_flipV.bottom = (int) (f6 + topBitmapHeight / 2); if (isInEdit) { canvas.drawLine(f1, f2, f3, f4, localPaint); canvas.drawLine(f3, f4, f7, f8, localPaint); canvas.drawLine(f5, f6, f7, f8, localPaint); canvas.drawLine(f5, f6, f1, f2, localPaint); canvas.drawBitmap(deleteBitmap, null, dst_delete, null); canvas.drawBitmap(resizeBitmap, null, dst_resize, null); // canvas.drawBitmap(flipVBitmap, null, dst_flipV, null); canvas.drawBitmap(topBitmap, null, dst_top, null); } canvas.restore(); } }
Example 17
Source File: RxSeatMovie.java From RxTools-master with Apache License 2.0 | 4 votes |
private float getMatrixScaleX() { matrix.getValues(m); return m[Matrix.MSCALE_X]; }
Example 18
Source File: DefaultZoomableController.java From ZoomableDraweeView-sample with Apache License 2.0 | 4 votes |
/** Gets the current scale factor. */ @Override public float getScaleFactor() { mActiveTransform.getValues(mTempValues); return mTempValues[Matrix.MSCALE_X]; }
Example 19
Source File: ZoomImageView.java From Theogony with MIT License | 2 votes |
/** * Returns the current scale value * * @return float - current scale value */ public final float getScale() { suppMatrix.getValues(matrixValues); return matrixValues[Matrix.MSCALE_X]; }
Example 20
Source File: ImageMatrixTouchHandler.java From PinchToZoom with MIT License | 2 votes |
/** * <p>Performs a zoom out animation so that the image entirely fits within the view using centerpoint coordinates.</p> * @param duration * @param x * @param y */ public void animateZoomOutToFit(long duration, float x, float y) { float sx = corrector.getValues()[Matrix.MSCALE_X]; animateZoom(sx, corrector.getInnerFitScale(), duration, new ScaleAnimatorHandler(corrector, x, y), null); }