美文网首页
会换位置的小球?

会换位置的小球?

作者: doit_7b21 | 来源:发表于2019-12-05 10:02 被阅读0次

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

    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。

    相关文章

      网友评论

          本文标题:会换位置的小球?

          本文链接:https://www.haomeiwen.com/subject/xmblgctx.html