在一个View的onDraw里面,根据传入的坐标(例如:(100,100))绘制一些点,然后View的Ontouch事件里面,双指对view进行缩放,然后计算出缩放率(比如缩放了2倍:2f),现在问题是:算出缩放率后怎么计算绘制的点的最新坐标?因为缩放时,中心点是变化的,所以直接用缩放率和点的坐标相乘是不行的~
因为点的坐标后面还需要用到其他地方,所以必须要计算出坐标,不然就直接缩放canvas了~~
或者有其他方法实现吗(根据坐标画一些点,再缩放)~求大神指点~跪谢!

解决方案 »

  1.   

    缩放后,getLocationOnScreen不能获取到它的location吗?
      

  2.   

    还有,getMatrix()也应该可以获取到吧
      

  3.   

    所有的捏合旋转都对matrix操作,然后在onDraw里对canvas使用matrix进行变换。
    大概的代码是这样子的    @Override
        public boolean onTouchEvent(MotionEvent event) {
                switch (event.getAction() & MotionEvent.ACTION_MASK) {
                    case MotionEvent.ACTION_DOWN:
                        lastPoint.set(event.getX(), event.getY());
                        break;
                    case MotionEvent.ACTION_UP:
                        break;                case MotionEvent.ACTION_POINTER_DOWN:
                        isPinch = true;
                        lastSpace = pinchSpace(event);
                        lastRotate = pinchRotation(event);
                        lastPoint = pinchCenter(event);
                        break;
                    case MotionEvent.ACTION_POINTER_UP:
                        isPinch = false;
                        break;
                    case MotionEvent.ACTION_MOVE:
                        PointF point = new PointF(event.getX(), event.getY());
                        if (isPinch)  {
                            float space = pinchSpace(event);
                            float rotate = pinchRotation(event);
                            PointF center = pinchCenter(event);                        matrix.postScale(space / lastSpace, space / lastSpace, center.x, center.y);
                            matrix.postRotate(rotate - lastRotate, center.x, center.y);                        lastSpace = space;
                            lastRotate = rotate;
                            point = center;
                        }
                        float dx = point.x - lastPoint.x;
                        float dy = point.y - lastPoint.y;
                        lastPoint = point;
                        matrix.postTranslate(dx, dy);
                        invalidate();
                        break;
                }
            return true;
        }    @Override
        protected void onDraw(Canvas canvas) {
            super.onDraw(canvas);
            if (mBitmap == null) {
                return;
            }
            canvas.concat(matrix);
            canvas.drawBitmap(mBitmap, 0, 0, mPaint);
            drawOrigin(canvas);
        }    private void drawOrigin(Canvas canvas) {
            if (mOrigin != null) {
                drawArrow(canvas, (float) mOrigin.x, (float) mOrigin.y, 50, (float) mOrigin.t, Color.RED);
            }
        }
      

  4.   

    基本算法其实很简单,就是以2指中点缩放,得到一个新的view,这个view的左上角就是原来view的左上角坐标*缩放比,有了这个点的坐标应该你要的那个点的位置不难求,也就是比例的问题,当然用矩阵那个类是最直接的