生成圆弧段中

时间:2017-03-18 00:16:39

标签: android math geometry objectanimator

我在PortraitWidget工作。基本上这个Widget是一个CustomView,允许用户从Gallery或Camera中选择一张照片。我想动画这个小部件,我想要实现的是这样的:

enter image description here

手写不好" C"代表相机图标。并且" G"代表图库图标。我想要做的是,如果用户点击铅笔图标,那么另一个较小的FAB将从铅笔FAB上升,绕圆周移动直到中间下部,然后按比例放大,并从那个非常FAB另一个较小的FAB将会出现,绕着圆周移动直到左中部,然后向上扩展。放大动画非常简单我想到了一切。我正在努力创造从一个点到另一个点的圆周路径。

这是我到目前为止所得到的:

private List<Point> calculateFirstSegmentPath() {
        int xo = (int) mCircleImageView.getWidth() - (2 *((mCircleImageView.getWidth()/5)));
        int yo = (int) mCircleImageView.getWidth() - (2 *((mCircleImageView.getWidth()/5)));

        Point origin = new Point(xo, yo);
        Log.d(TAG, String.format("Start Point (%d, %d)", origin.x, origin.y));

        //r Radius, x0 X Center, y0 Y Center. The /5 is to substract a little padding
        int r = mCircleImageView.getWidth()/2;
        float x0 = r - (mCircleImageView.getWidth()/5);
        float y0 = r - (mCircleImageView.getWidth()/5);

        ArrayList<Point> path = new ArrayList<>();

        for (double t = 0; t < 2*Math.PI; t+=0.01) {
            int x = (int) Math.round(r * Math.cos(t) + x0);
            int y = (int) Math.round(r * Math.sin(t) + y0);

            int x2 = Math.abs(r - x), y2 = Math.abs(r - y);

            Log.d(TAG, String.format("Iterating (%d, %d)", x2, y2));

            if (x2 >= x && y2 >= y) {
                path.add(new Point(x, y));
            }

        }

        return path;
    }

此代码生成一个围绕整个圆周移动的路径,我需要做的是将该路径减少到只有一个段。我尝试过几次比较,但没有一个比较好。另外,我不想生成整个圆周路径只是为了显示一个段,我想直接生成从一个点到另一个点的路径,而不必在圆周上进行任何额外的迭代。

有什么想法吗?建议?

0 个答案:

没有答案
相关问题