如何在android

时间:2017-02-16 07:37:07

标签: android bitmap imageview android-imageview android-bitmap

我正在研究Android App的Frame多重布局选择功能。

我的要求是在缩放和捏合图像后获取位图的顶部和左侧坐标。

我正在使用TouchImageView进行缩放和移动功能。

我尝试了很多SO解决方案,但没有得到我的要求的解决方案。

第一次尝试 -

public static int[] getBitmapOffset(ImageView img, boolean includeLayout) {
        int[] offset = new int[2];
        float[] values = new float[9];

        Matrix m = img.getImageMatrix();
        m.getValues(values);

        offset[0] = (int) values[5];
        offset[1] = (int) values[2];

        if (includeLayout) {
            ViewGroup.MarginLayoutParams lp = (ViewGroup.MarginLayoutParams) img.getLayoutParams();
            int paddingTop = (int) (img.getPaddingTop() );
            int paddingLeft = (int) (img.getPaddingLeft() );

            offset[0] += paddingTop + lp.topMargin;
            offset[1] += paddingLeft + lp.leftMargin;
        }
        return offset;
    }

第二次尝试 -

            Rect r = img.getDrawable().getBounds();

            int drawLeft = r.left;
            int drawTop = r.top;
            int drawRight = r.right;
            int drawBottom = r.bottom;

            Logger.logsInfo(TAG, "Focus drawLeft : " + i + " : " +drawLeft);
            Logger.logsInfo(TAG, "Focus drawTop : " + i + " : " +drawTop);
            Logger.logsInfo(TAG, "Focus drawRight : " + i + " : " +drawRight);
            Logger.logsInfo(TAG, "Focus drawBottom : " + i + " : " +drawBottom);

请让我知道我做错了什么,因为我在过去3天内正在研究这个问题,但仍未完成。

先谢谢。 建议真的很感激。

1 个答案:

答案 0 :(得分:0)

查看getZoomedRect

TouchImageView

添加功能并返回PointF topLeft = transformCoordTouchToBitmap(0, 0, true);

方法签名

private PointF transformCoordTouchToBitmap(float x, float y, boolean clipToBitmap)

传递clipToBitmap true表示可见的矩形

/**
     * Return a Rect representing the zoomed image.
     * @return rect representing zoomed image
     */
    public RectF getZoomedRect() {
        if (mScaleType == ScaleType.FIT_XY) {
            throw new UnsupportedOperationException("getZoomedRect() not supported with FIT_XY");
        }
        PointF topLeft = transformCoordTouchToBitmap(0, 0, true);
        PointF bottomRight = transformCoordTouchToBitmap(viewWidth, viewHeight, true);

        float w = getDrawable().getIntrinsicWidth();
        float h = getDrawable().getIntrinsicHeight();
        return new RectF(topLeft.x / w, topLeft.y / h, bottomRight.x / w, bottomRight.y / h);
    }