一个自定义截屏view的实现过程

一个自定义view的实现过程,用于截屏功能的实现,结合 截屏使用,此段代码在项目中引用即可,此段代码可实现标记任意区域,并通过拖动实现标记区域的移动和缩放,文件下载位置看这里


package views;

import com.example.cutcapture.R;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.graphics.Paint.Style;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.view.WindowManager;

public class DrawView extends View {

    private Context mContext;

    private int width = 0;

    private int height = 0;

    private int y = 0;

    private int x = 0;

    private int mX = 0;

    private int mY = 0;

    private Paint unMarkPaint;

    public Paint circlePaint;

    private int displayWidth;

    private int displayHeight;

    public Paint mBitPaint;

    private Bitmap okBitmap;

    private int okWidth;

    private int okHeight;

    private Bitmap cancleBitmap;

    private int cancleWidth;

    private int cancleHeight;

    private Rect okRect;

    private Rect cancleRect;

    private Rect okDisRect;

    private Rect cancleDisRect;

    private int pointLeft;

    private int pointTop;

    private ClickListenrInterface mClickListenerInterfate;

    private int[] areas;

    private int[] points;

    private int pointRight;

    private int pointBottom;

    private Rect markRect;

    private int starX;

    private int starY;

    private int pointULX;

    private int pointULY;

    private int pointUMX;

    private int pointUMY;

    private int pointURX;

    private int pointURY;

    private int pointMLX;

    private int pointMLY;

    private int pointMRX;

    private int pointMRY;

    private int pointDLX;

    private int pointDLY;

    private int pointDMX;

    private int pointDMY;

    private int pointDRX;

    private int pointDRY;

    private Rect uLRect;

    private Rect uMRect;

    private Rect uRRect;

    private Rect mLRect;

    private Rect mRRect;

    private Rect dLRect;

    private Rect dMRect;

    private Rect dRRect;

    private int xx;

    private int yy;

    private Bitmap zoomBitmap;

    private int zoomWidth;

    private int zoomHeith;

    private Rect zoomRect;

    private Rect zoomDisRect;

    private int[] drawAreas;

    private int[] drawPoints;

    public DrawView(Context context) {
        super(context, null);
        setWillNotDraw(false);
        this.mContext = context;
        init();
    }

    public DrawView(Context context, AttributeSet attrs) {
        super(context, attrs);
        setWillNotDraw(false);
        this.mContext = context;
        init();
    }

    private void init() {
        WindowManager wm = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE);
        displayWidth = wm.getDefaultDisplay().getWidth();
        displayHeight = wm.getDefaultDisplay().getHeight();

        unMarkPaint = new Paint(Paint.FILTER_BITMAP_FLAG);
        unMarkPaint.setColor(Color.BLACK);

        circlePaint = new Paint(Paint.FILTER_BITMAP_FLAG);
        circlePaint.setColor(Color.WHITE);
        // circlePaint.setAlpha(90);
        circlePaint.setStrokeWidth(3);
        circlePaint.setAntiAlias(true);
        circlePaint.setStyle(Style.STROKE);

        mBitPaint = new Paint();
        mBitPaint.setFilterBitmap(true);
        mBitPaint.setDither(true);
        // mBitPaint.setAlpha(100);

        BitmapFactory.Options options = new BitmapFactory.Options();
        options.inJustDecodeBounds = true;

        okBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.ok);
        okWidth = okBitmap.getWidth();
        okHeight = okBitmap.getHeight();
        cancleBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.cancle);
        cancleWidth = cancleBitmap.getWidth();
        cancleHeight = cancleBitmap.getHeight();
        zoomBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.zoomout);
        zoomWidth = zoomBitmap.getWidth();
        zoomHeith = zoomBitmap.getHeight();

        okRect = new Rect(0, 0, okWidth, okHeight);
        cancleRect = new Rect(0, 0, cancleWidth, cancleHeight);
        zoomRect = new Rect(0, 0, zoomWidth, zoomHeith);

        areas = new int[2]; // 截图区域宽高
        points = new int[4]; // 触摸松手后截图区域左上角和右下角坐标
        drawAreas = new int[2]; // 重绘后截图区域的宽高
        drawPoints = new int[4];// 重绘后截图区域的点的坐标

        markRect = new Rect();
        uLRect = new Rect();
        uMRect = new Rect();
        uRRect = new Rect();
        mLRect = new Rect();
        mRRect = new Rect();
        dLRect = new Rect();
        dMRect = new Rect();
        dRRect = new Rect();
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        if (event.getAction() == MotionEvent.ACTION_DOWN) {
            xx = (int) event.getX();
            yy = (int) event.getY();
            // 必须先对点击事件做判断,否则会执行到move中
            if (okDisRect.contains(xx, yy)) {
                mClickListenerInterfate.doConfirm();
                return false;
            } else if (cancleDisRect.contains(xx, yy)) {
                mClickListenerInterfate.doCancel();
                return false;
            } else if (zoomDisRect.contains(xx, yy)) {
                mClickListenerInterfate.doZoomOut();
                return false;
            } else if (markRect.contains(xx, yy) || uLRect.contains(xx, yy)
                    || uMRect.contains(xx, yy) || uRRect.contains(xx, yy)
                    || mLRect.contains(xx, yy) || mRRect.contains(xx, yy)
                    || dLRect.contains(xx, yy) || dMRect.contains(xx, yy)
                    || dRRect.contains(xx, yy)) {
                starX = (int) event.getX();
                starY = (int) event.getY();
            } else {
                x = (int) event.getX();
                y = (int) event.getY();
            }
        }

        if (event.getAction() == MotionEvent.ACTION_MOVE) {
            if (markRect.contains(xx, yy) || uLRect.contains(xx, yy) || uMRect.contains(xx, yy)
                    || uRRect.contains(xx, yy) || mLRect.contains(xx, yy)
                    || mRRect.contains(xx, yy) || dLRect.contains(xx, yy)
                    || dMRect.contains(xx, yy) || dRRect.contains(xx, yy)) {
                int endX = (int) event.getX();
                int endY = (int) event.getY();
                // 计算触摸点移动后的位置和移动距离
                if (uMRect.contains(starX, starY)) { // 上中
                    y = points[1] + endY - starY;
                } else if (mLRect.contains(starX, starY)) { // 中左
                    x = points[0] + endX - starX;
                } else if (mRRect.contains(starX, starY)) { // 中右
                    mX = points[2] + endX - starX;
                } else if (dMRect.contains(starX, starY)) { // 下中
                    mY = points[3] + endY - starY;
                } else if (dLRect.contains(starX, starY)) { // 下左
                    x = points[0] + endX - starX;
                    mY = points[3] + endY - starY;
                } else if (dRRect.contains(starX, starY)) { // 下右---
                    mX = points[2] + endX - starX;
                    mY = points[3] + endY - starY;
                } else if (uLRect.contains(starX, starY)) { // 上左
                    x = points[0] + endX - starX;
                    y = points[1] + endY - starY;
                } else if (uRRect.contains(starX, starY)) { // 上右---
                    y = points[1] + endY - starY;
                    mX = points[2] + endX - starX;
                } else if (markRect.contains(starX, starY)) { // 截图区
                    x = points[0] + endX - starX;
                    y = points[1] + endY - starY;
                    mX = points[2] + endX - starX;
                    mY = points[3] + endY - starY;
                }
                // 边界值
                if (mX > displayWidth) {
                    mX = displayWidth;
                }
                if (mX <= 0) {
                    mX = 0;
                }
                if (mY >= displayHeight) {
                    mY = displayHeight;
                }
                if (mY <= 0) {
                    mY = 0;
                }
                if (x >= displayWidth) {
                    x = displayWidth;
                }
                if (x <= 0) {
                    x = 0;
                }
                if (y >= displayHeight) {
                    y = displayHeight;
                }
                if (y <= 0) {
                    y = 0;
                }
            } else {
                mX = (int) event.getX();
                mY = (int) event.getY();
            }

            localOptions();
            postInvalidate();
        }

        if (event.getAction() == MotionEvent.ACTION_UP) {
            if (event.getX() > x) {
                width = (int) (event.getX() - x);
            } else {
                width = (int) (x - event.getX());
            }
            if (event.getY() > y) {
                height = (int) (event.getY() - y);
            } else {
                height = (int) (y - event.getY());
            }
            areas[0] = width;
            areas[1] = height;

            points[0] = pointLeft;
            points[1] = pointTop;
            points[2] = pointRight;
            points[3] = pointBottom;

            markRect = new Rect(pointLeft, pointTop, pointRight, pointBottom);
            uLRect = new Rect(pointULX - 20, pointULY - 10, pointULX, pointULY + 10);
            uMRect = new Rect(pointUMX - 10, pointUMY - 20, pointUMX + 10, pointUMY);
            uRRect = new Rect(pointURX, pointURY - 10, pointURX + 20, pointURY + 10);
            mLRect = new Rect(pointMLX - 20, pointMLY - 10, pointMLX, pointMLY + 10);
            mRRect = new Rect(pointMRX, pointMRY - 10, pointMRX + 20, pointMRY + 10);
            dLRect = new Rect(pointDLX - 10, pointDLY, pointDLX + 10, pointDLY + 20);
            dMRect = new Rect(pointDMX - 10, pointDMY, pointDMX + 10, pointDMY + 20);
            dRRect = new Rect(pointDRX - 10, pointDRY, pointDRX + 10, pointDRY + 20);
        }
        return true;
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        if (x < mX && y < mY) { // 左上-->右下
            canvas.drawRect(new Rect(0, y, x, mY), unMarkPaint); // 左
            canvas.drawRect(new Rect(0, 0, displayWidth, y), unMarkPaint); // 上
            canvas.drawRect(new Rect(mX, y, displayWidth, mY), unMarkPaint); // 右
            canvas.drawRect(new Rect(0, mY, displayWidth, displayHeight), unMarkPaint); // 下

            drawCircle(canvas, x, y, circlePaint); // 上左
            drawCircle(canvas, Math.abs(mX - x) / 2 + x, y, circlePaint); // 上中
            drawCircle(canvas, mX, y, circlePaint); // 上右
            drawCircle(canvas, x, Math.abs(mY - y) / 2 + y, circlePaint); // 中左
            drawCircle(canvas, mX, Math.abs(mY - y) / 2 + y, circlePaint); // 中右
            drawCircle(canvas, x, mY, circlePaint); // 下左
            drawCircle(canvas, Math.abs(mX - x) / 2 + x, mY, circlePaint); // 下中
            drawCircle(canvas, mX, mY, circlePaint); // 下右
        } else if (x < mX && y > mY) { // 左下-->右上
            canvas.drawRect(new Rect(0, mY, x, y), unMarkPaint); // 左
            canvas.drawRect(new Rect(0, 0, displayWidth, mY), unMarkPaint); // 上
            canvas.drawRect(new Rect(mX, mY, displayWidth, y), unMarkPaint); // 右
            canvas.drawRect(new Rect(0, y, displayWidth, displayHeight), unMarkPaint); // 下

            drawCircle(canvas, x, mY, circlePaint); // 上左
            drawCircle(canvas, Math.abs(mX - x) / 2 + x, mY, circlePaint); // 上中
            drawCircle(canvas, mX, mY, circlePaint); // 上右
            drawCircle(canvas, x, Math.abs(mY - y) / 2 + mY, circlePaint); // 中左
            drawCircle(canvas, mX, Math.abs(mY - y) / 2 + mY, circlePaint); // 中右
            drawCircle(canvas, x, y, circlePaint); // 下左
            drawCircle(canvas, Math.abs(mX - x) / 2 + x, y, circlePaint); // 下中
            drawCircle(canvas, mX, y, circlePaint); // 下右
        } else if (x > mX && y < mY) { // 右上-->左下
            canvas.drawRect(new Rect(0, y, mX, mY), unMarkPaint); // 左
            canvas.drawRect(new Rect(0, 0, displayWidth, y), unMarkPaint); // 上
            canvas.drawRect(new Rect(x, y, displayWidth, mY), unMarkPaint); // 右
            canvas.drawRect(new Rect(0, mY, displayWidth, displayHeight), unMarkPaint); // 下

            drawCircle(canvas, mX, y, circlePaint); // 上左
            drawCircle(canvas, Math.abs(mX - x) / 2 + mX, y, circlePaint); // 上中
            drawCircle(canvas, x, y, circlePaint); // 上右
            drawCircle(canvas, mX, Math.abs(mY - y) / 2 + y, circlePaint); // 中左
            drawCircle(canvas, x, Math.abs(mY - y) / 2 + y, circlePaint); // 中右
            drawCircle(canvas, mX, mY, circlePaint); // 下左
            drawCircle(canvas, Math.abs(mX - x) / 2 + mX, mY, circlePaint); // 下中
            drawCircle(canvas, x, mY, circlePaint); // 下右
        } else if (x > mX && y > mY) { // 右下-->左上
            canvas.drawRect(new Rect(0, mY, mX, y), unMarkPaint); // 左
            canvas.drawRect(new Rect(0, 0, displayWidth, mY), unMarkPaint); // 上
            canvas.drawRect(new Rect(x, mY, displayWidth, y), unMarkPaint); // 右
            canvas.drawRect(new Rect(0, y, displayWidth, displayHeight), unMarkPaint); // 下

            drawCircle(canvas, mX, mY, circlePaint); // 上左
            drawCircle(canvas, Math.abs(mX - x) / 2 + mX, mY, circlePaint); // 上中
            drawCircle(canvas, x, mY, circlePaint); // 上右
            drawCircle(canvas, mX, Math.abs(mY - y) / 2 + mY, circlePaint); // 中左
            drawCircle(canvas, x, Math.abs(mY - y) / 2 + mY, circlePaint); // 中右
            drawCircle(canvas, mX, y, circlePaint); // 下左
            drawCircle(canvas, Math.abs(mX - x) / 2 + mX, y, circlePaint); // 下中
            drawCircle(canvas, x, y, circlePaint); // 下右
        } else {
            canvas.drawRect(new Rect(0, 0, displayWidth, displayHeight), unMarkPaint);
            okDisRect = new Rect(0, 0, 0, 0);
            cancleDisRect = new Rect(0, 0, 0, 0);
            zoomDisRect = new Rect(0, 0, 0, 0);
        }

        circlePoint();
        localOptions();

        canvas.drawBitmap(okBitmap, okRect, okDisRect, mBitPaint);
        canvas.drawBitmap(cancleBitmap, cancleRect, cancleDisRect, mBitPaint);
        canvas.drawBitmap(zoomBitmap, zoomRect, zoomDisRect, mBitPaint);
    }

    private void drawCircle(Canvas canvas, int x, int y, Paint paint) {
        canvas.drawCircle(x, y, 7, paint);
    }

    public void setBitmapPaint(int imgId) {
        zoomBitmap = BitmapFactory.decodeResource(getResources(), imgId);
        zoomWidth = zoomBitmap.getWidth();
        zoomHeith = zoomBitmap.getHeight();
    }

    public int[] getArea() {
        return areas;
    }

    // 重绘后
    public int[] getDrawArea() {
        return drawAreas;
    }

    public int[] getMarkPoint() {
        return points;
    }

    // 重绘后
    public int[] getDrawMarkPoint() {
        return drawPoints;
    }

    // 设置截图区域的坐标点
    public void setMarkPoint(int[] are) {
        x = are[0];
        y = are[1];
        mX = are[2];
        mY = are[3];
    }

    // 启动时,初始化截图区域
    public void initMarkArea(int[] are) {
        x = are[0];
        y = are[1];
        mX = are[2];
        mY = are[3];

        points[0] = x;
        points[1] = y;
        points[2] = mX;
        points[3] = mY;

        // 圆的坐标点
        pointULX = x;
        pointULY = y;

        pointUMX = Math.abs(mX - x) / 2 + x;
        pointUMY = y;

        pointURX = mX;
        pointURY = y;

        pointMLX = x;
        pointMLY = Math.abs(mY - y) / 2 + y;

        pointMRX = mX;
        pointMRY = Math.abs(mY - y) / 2 + y;

        pointDLX = x;
        pointDLY = mY;

        pointDMX = Math.abs(mX - x) / 2 + x;
        pointDMY = mY;

        pointDRX = mX;
        pointDRY = mY;

        markRect = new Rect(x, y, mX, mY);
        uLRect = new Rect(pointULX - 20, pointULY - 10, pointULX, pointULY + 10);
        uMRect = new Rect(pointUMX - 10, pointUMY - 20, pointUMX + 10, pointUMY);
        uRRect = new Rect(pointURX, pointURY - 10, pointURX + 20, pointURY + 10);
        mLRect = new Rect(pointMLX - 20, pointMLY - 10, pointMLX, pointMLY + 10);
        mRRect = new Rect(pointMRX, pointMRY - 10, pointMRX + 20, pointMRY + 10);
        dLRect = new Rect(pointDLX - 10, pointDLY, pointDLX + 10, pointDLY + 20);
        dMRect = new Rect(pointDMX - 10, pointDMY, pointDMX + 10, pointDMY + 20);
        dRRect = new Rect(pointDRX - 10, pointDRY, pointDRX + 10, pointDRY + 20);
    }

    private void localOptions() {
        // 按钮位置
        if (x < mX && y < mY) { // 左上-->右下
            if (displayHeight - mY >= 2 * okHeight) { // 底下
                okDisRect = new Rect(mX - 50, mY + 10, okWidth + mX - 50, okHeight + mY + 10);
                cancleDisRect = new Rect(mX - 120, mY + 10, cancleWidth + mX - 120, cancleHeight
                        + mY + 10);
                zoomDisRect = new Rect(mX - 190, mY + 10, zoomWidth + mX - 190, zoomHeith + mY + 10);
            } else if (y >= 3 * okHeight) { // 上面
                okDisRect = new Rect(mX - 50, y - 60, okWidth + mX - 50, okHeight + y - 60);
                cancleDisRect = new Rect(mX - 120, y - 60, cancleWidth + mX - 120, cancleHeight + y
                        - 60);
                zoomDisRect = new Rect(mX - 190, y - 60, zoomWidth + mX - 190, zoomHeith + y - 60);
            } else { // 截图区右下角
                okDisRect = new Rect(mX - 50, mY - 60, okWidth + mX - 50, okHeight + mY - 60);
                cancleDisRect = new Rect(mX - 120, mY - 60, cancleWidth + mX - 120, cancleHeight
                        + mY - 60);
                zoomDisRect = new Rect(mX - 190, mY - 60, zoomWidth + mX - 190, zoomHeith + mY - 60);
            }
        } else if (x < mX && y > mY) { // 左下-->右上
            if (displayHeight - y >= 2 * okHeight) {
                okDisRect = new Rect(mX - 50, y + 10, okWidth + mX - 50, okHeight + y + 10);
                cancleDisRect = new Rect(mX - 120, y + 10, cancleWidth + mX - 120, cancleHeight + y
                        + 10);
                zoomDisRect = new Rect(mX - 190, y + 10, zoomWidth + mX - 190, zoomHeith + y + 10);
            } else if (mY > 3 * okHeight) {
                okDisRect = new Rect(mX - 50, mY - 60, okWidth + mX - 50, okHeight + mY - 60);
                cancleDisRect = new Rect(mX - 120, mY - 60, cancleWidth + mX - 120, cancleHeight
                        + mY - 60);
                zoomDisRect = new Rect(mX - 190, mY - 60, zoomWidth + mX - 190, zoomHeith + mY - 60);
            } else {
                okDisRect = new Rect(mX - 50, y - 60, okWidth + mX - 50, okHeight + y - 60);
                cancleDisRect = new Rect(mX - 120, y - 60, cancleWidth + mX - 120, cancleHeight + y
                        - 60);
                zoomDisRect = new Rect(mX - 190, y - 60, zoomWidth + mX - 190, zoomHeith + y - 60);
            }

        } else if (x > mX && y < mY) { // 右上-->左下
            if (displayHeight - mY >= 2 * okHeight) {
                okDisRect = new Rect(x - 50, mY + 10, okWidth + x - 50, okHeight + mY + 10);
                cancleDisRect = new Rect(x - 120, mY + 10, cancleWidth + x - 120, cancleHeight + mY
                        + 10);
                zoomDisRect = new Rect(x - 190, mY + 10, zoomWidth + x - 190, zoomHeith + mY + 10);
            } else if (y >= 3 * okHeight) {
                okDisRect = new Rect(x - 50, y - 60, okWidth + x - 50, okHeight + y - 60);
                cancleDisRect = new Rect(x - 120, y - 60, cancleWidth + x - 120, cancleHeight + y
                        - 60);
                zoomDisRect = new Rect(x - 190, y - 60, zoomWidth + x - 190, zoomHeith + y - 60);
            } else {
                okDisRect = new Rect(x - 50, mY - 60, okWidth + x - 50, okHeight + mY - 60);
                cancleDisRect = new Rect(x - 120, mY - 60, cancleWidth + x - 120, cancleHeight + mY
                        - 60);
                zoomDisRect = new Rect(x - 190, mY - 60, zoomWidth + x - 190, zoomHeith + mY - 60);
            }
        } else if (x > mX && y > mY) { // 右下-->左上
            if (displayHeight - y > 2 * okHeight) {
                okDisRect = new Rect(x - 50, y + 10, okWidth + x - 50, okHeight + y + 10);
                cancleDisRect = new Rect(x - 120, y + 10, cancleWidth + x - 120, cancleHeight + y
                        + 10);
                zoomDisRect = new Rect(x - 190, y + 10, zoomWidth + x - 190, zoomHeith + y + 10);
            } else if (mY >= 3 * okHeight) {
                okDisRect = new Rect(x - 50, mY - 60, okWidth + x - 50, okHeight + mY - 60);
                cancleDisRect = new Rect(x - 120, mY - 60, cancleWidth + x - 120, cancleHeight + mY
                        - 60);
                zoomDisRect = new Rect(x - 190, mY - 60, zoomWidth + x - 190, zoomHeith + mY - 60);
            } else {
                okDisRect = new Rect(x - 50, y - 60, okWidth + x - 50, okHeight + y - 60);
                cancleDisRect = new Rect(x - 120, y - 60, cancleWidth + x - 120, cancleHeight + y
                        - 60);
                zoomDisRect = new Rect(x - 190, y - 60, zoomWidth + x - 190, zoomHeith + y - 60);
            }
        }
    }

    private void circlePoint() {
        if (x < mX && y < mY) { // 左上-->右下
            // 截图区域左上右下角
            pointLeft = x;
            pointTop = y;
            pointRight = mX;
            pointBottom = mY;

            // 圆的坐标点
            pointULX = x;
            pointULY = y;

            pointUMX = Math.abs(mX - x) / 2 + x;
            pointUMY = y;

            pointURX = mX;
            pointURY = y;

            pointMLX = x;
            pointMLY = Math.abs(mY - y) / 2 + y;

            pointMRX = mX;
            pointMRY = Math.abs(mY - y) / 2 + y;

            pointDLX = x;
            pointDLY = mY;

            pointDMX = Math.abs(mX - x) / 2 + x;
            pointDMY = mY;

            pointDRX = mX;
            pointDRY = mY;

            drawPoints[0] = pointLeft;
            drawPoints[1] = pointTop;
            drawPoints[2] = pointRight;
            drawPoints[3] = pointBottom;

            drawAreas[0] = mX - x;
            drawAreas[1] = mY - y;
        } else if (x > mX && y > mY) { // 右下-->左上
            pointLeft = mX;
            pointTop = mY;
            pointRight = x;
            pointBottom = y;

            // 圆的坐标点
            pointULX = mX;
            pointULY = mY;

            pointUMX = Math.abs(mX - x) / 2 + mX;
            pointUMY = mY;

            pointURX = x;
            pointURY = mY;

            pointMLX = x;
            pointMLY = Math.abs(mY - y) / 2 + mY;

            pointMRX = x;
            pointMRY = Math.abs(mY - y) / 2 + mY;

            pointDLX = mX;
            pointDLY = y;

            pointDMX = Math.abs(mX - x) / 2 + mX;
            pointDMY = y;

            pointDRX = x;
            pointDRY = y;

            drawPoints[0] = pointLeft;
            drawPoints[1] = pointTop;
            drawPoints[2] = pointRight;
            drawPoints[3] = pointBottom;

            drawAreas[0] = x - mX;
            drawAreas[1] = y - mY;
        } else if (x < mX && y > mY) { // 左下-->右上
            pointLeft = x;
            pointTop = mY;
            pointRight = mX;
            pointBottom = y;

            // 圆的坐标点
            pointULX = x;
            pointULY = mY;

            pointUMX = Math.abs(mX - x) / 2 + x;
            pointUMY = mY;

            pointURX = mX;
            pointURY = mY;

            pointMLX = x;
            pointMLY = Math.abs(mY - y) / 2 + mY;

            pointMRX = mX;
            pointMRY = Math.abs(mY - y) / 2 + mY;

            pointDLX = x;
            pointDLY = y;

            pointDMX = Math.abs(mX - x) / 2 + x;
            pointDMY = y;

            pointDRX = mX;
            pointDRY = y;

            drawPoints[0] = pointLeft;
            drawPoints[1] = pointTop;
            drawPoints[2] = pointRight;
            drawPoints[3] = pointBottom;

            drawAreas[0] = mX - x;
            drawAreas[1] = y - mY;
        } else if (x > mX && y < mY) { // 右上-->左下
            pointLeft = mX;
            pointTop = y;
            pointRight = x;
            pointBottom = mY;

            // 圆的坐标点
            pointULX = mX;
            pointULY = y;

            pointUMX = Math.abs(mX - x) / 2 + mX;
            pointUMY = y;

            pointURX = x;
            pointURY = y;

            pointMLX = mX;
            pointMLY = Math.abs(mY - y) / 2 + y;

            pointMRX = x;
            pointMRY = Math.abs(mY - y) / 2 + y;

            pointDLX = mX;
            pointDLY = mY;

            pointDMX = Math.abs(mX - x) / 2 + mX;
            pointDMY = mY;

            pointDRX = x;
            pointDRY = mY;

            drawPoints[0] = pointLeft;
            drawPoints[1] = pointTop;
            drawPoints[2] = pointRight;
            drawPoints[3] = pointBottom;

            drawAreas[0] = x - mX;
            drawAreas[1] = mY - y;
        }
    }

    public interface ClickListenrInterface {
        public void doConfirm();

        public void doZoomOut();

        public void doCancel();
    }

    public void setClickListener(ClickListenrInterface clickListener) {
        this.mClickListenerInterfate = clickListener;
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值