会换位置的小球?

2019-12-05  本文已影响0人  doit_7b21

这里没有废话之先上效果图。

uxwfe-xwobm.gif

这里没有废话之思路描述

1.确定小圆所在大圆的圆心及轨迹
2.根据圆心及小圆所在位置确定运动轨迹
3.跟着轨迹High起来

这里没有废话之核心代码

 @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        //小球分布圆
        paint.reset();
//        paint.setStyle(Paint.Style.STROKE);
//        canvas.drawCircle(w / 2, h / 2, w / 3, paint);
        paint.setStyle(Paint.Style.FILL);
        paint.setShader(linearGradient[linearGradient.length - 1]);
        //中心小圆
        canvas.drawCircle(ballPos[ballPos.length - 1][0], ballPos[ballPos.length - 1][1], sballradius, paint);
        //画小球
        for (int i = 0; i < ballCount; i++) {
            float x = ballPos[i][0];
            float y = ballPos[i][1];
            paint.setShader(linearGradient[i]);
            paint.setStyle(Paint.Style.FILL);
            canvas.drawCircle(x, y, sballradius, paint);
//            if (i < paths.length) {
//                paint.setShader(null);
//                paint.setStyle(Paint.Style.STROKE);
//                canvas.drawPath(paths[i], paint);
//            }
        }
        //开始动画
        float l;
        switch (step) {
            case 0:
                pathMeasure.setPath(paths[0], false);
                l = pathMeasure.getLength();
                pathMeasure.getPosTan(l * offset, pos, tan);
                ballPos[0][0] = pos[0];
                ballPos[0][1] = pos[1];
                pathMeasure.setPath(paths[ballPos.length - 1], false);
                l = pathMeasure.getLength();
                pathMeasure.getPosTan(l * (1 - offset1), pos, tan);
                ballPos[ballPos.length - 1][0] = pos[0];
                ballPos[ballPos.length - 1][1] = pos[1];
//                Log.e("fx","l-->"+l+"pos"+Arrays.toString(pos)+"offset-->"+offset1);
                break;
            case 1:
//                pathMeasure.setPath(paths[step], false);
//                l = pathMeasure.getLength();
//                pathMeasure.getPosTan(l * offset, pos, tan);
//                ballPos[step][0] = pos[0];
//                ballPos[step][1] = pos[1];
////                Log.e("fx_1","l-->"+l+"pos"+Arrays.toString(pos)+"offset-->"+offset);
//                pathMeasure.setPath(paths[step - 1], false);
//                l = pathMeasure.getLength();
//                pathMeasure.getPosTan(l * (1-offset1), pos, tan);
//                ballPos[step - 1][0] = pos[0];
//                ballPos[step - 1][1] = pos[1];
//                Log.e("fx_1","l-->"+l+"pos"+Arrays.toString(pos)+"offset1-->"+offset1);
            case 2:
            case 3:
            case 4:
            case 5:
                pathMeasure.setPath(paths[step], false);
                l = pathMeasure.getLength();
                pathMeasure.getPosTan(l * offset, pos, tan);
                ballPos[step][0] = pos[0];
                ballPos[step][1] = pos[1];
                pathMeasure.setPath(paths[step - 1], false);
                l = pathMeasure.getLength();
                pathMeasure.getPosTan(l * (1 - offset1), pos, tan);
                ballPos[step - 1][0] = pos[0];
                ballPos[step - 1][1] = pos[1];
                break;
            case 6:
                pathMeasure.setPath(paths[step], false);
                l = pathMeasure.getLength();
                pathMeasure.getPosTan(l * offset, pos, tan);
                ballPos[step][0] = pos[0];
                ballPos[step][1] = pos[1];
                pathMeasure.setPath(paths[0], false);
                l = pathMeasure.getLength();
                pathMeasure.getPosTan(l * (1 - offset1), pos, tan);
                ballPos[0][1] = pos[1];
                break;


        }
//
        Log.i("fx_ondraw_" + (ballPos.length - 1), Arrays.toString(ballPos[ballPos.length - 1]));
        Log.i("fx_ondraw_0", Arrays.toString(ballPos[0]));
        Log.i("fx_ondraw_1", Arrays.toString(ballPos[1]) + "step-->" + step);
    }

github传送门

这里没有废话之总结

1.已知半径,角度 求圆上任意一点。
2.path 及 pathmeasure用法
3.贝塞尔曲线
4.ValueAnimator

这里没有废话之鸣谢

感谢https://www.aconvert.com/cn/帮我转了gif。

上一篇 下一篇

猜你喜欢

热点阅读