我在PortraitWidget工作。基本上这个Widget是一个CustomView,允许用户从Gallery或Camera中选择一张照片。我想动画这个小部件,我想要实现的是这样的:
手写不好" 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;
}
此代码生成一个围绕整个圆周移动的路径,我需要做的是将该路径减少到只有一个段。我尝试过几次比较,但没有一个比较好。另外,我不想生成整个圆周路径只是为了显示一个段,我想直接生成从一个点到另一个点的路径,而不必在圆周上进行任何额外的迭代。
有什么想法吗?建议?