-1

オブジェクトアニメーターとパスエバリュエーターを使用しているため、円形パスに沿って円を移動する必要があります。すべての情報は動的であるため、応答を受け取ったときに変更されるため、実行時に円の総数を変更できます。ここに1つの部分がありますユーザーがタッチを離すと、このメソッドが呼び出されます-:

public void slideDownSetToCenter() {

    for (int i = 0; i < leftCurrentRunningAnimation.length; i++) {

        Logger.i(TAG, "in slide down animation");
        if (leftReadyToMove[i]) {

            if (leftUpQueue.contains(i)) {
                leftUpQueue.remove(i);
            }
            leftAngle = leftSlice * ++leftAllCirclesAngles[i];
            Logger.i("circle leftAngle points of curve down", String.valueOf(leftAllCirclesAngles[i]));
            if (leftAngle > leftAngleTop) {
                if (i < leftCurrentRunningAnimation.length - 1) {
                    leftReadyToMove[i + 1] = true; // set next circle to
                                                    // move
                }
            }
            Arrays.fill(leftCurrentRunningAnimation, false);
            leftCurrentRunningAnimation[i] = true;

            Logger.i(TAG, "leftAngle" + leftAngle);

            if (leftReadyToMove[i] == true && leftAngle == leftAngleDownOut) {

                leftReadyToMove[i] = false;
                leftDownStack.add(i);
            }

            xPosition = (int) (leftCircleCenterX + leftCircleX * Math.cos(leftAngle));
            yPosition = (int) (leftCircleCenterY + leftCircleY * Math.sin(leftAngle));

            Path = new AnimatorPath();
            Path.moveTo(xPosition, yPosition);
            Path.lineTo(xPosition, yPosition);
            while (true) {
                if (leftAngle == leftAngleDownOut) {
                    break;
                }

                leftAngle = leftSlice * ++leftAllCirclesAngles[i];
                xPosition = (int) (leftCircleCenterX + leftCircleX * Math.cos(leftAngle));
                yPosition = (int) (leftCircleCenterY + leftCircleY * Math.sin(leftAngle));
                Path.lineTo(xPosition, yPosition);
                Logger.i(TAG, "path.........");
            }
            slideCircleAnimator = ObjectAnimator.ofObject(DynamicCircleSwipeAnimation.this, "leftButtonLocationDynamic", new PathEvaluator(), Path.getPoints().toArray());
            slideCircleAnimator.setInterpolator(linearInterpolator);
            slideCircleAnimator.setDuration(500);
            context.runOnUiThread(new Runnable() {

                @Override
                public void run() {
                    slideCircleAnimator.start();
                }
            });

        }
        break;
    }
}

オブジェクト アニメーターのアニメーション メソッドは次のとおりです。

  public void setLeftButtonLocationDynamic(final PathPoint newLoc) {

    for (int i = 0; i < leftCurrentRunningAnimation.length; i++) {
        if (leftCurrentRunningAnimation[i] == true) {
            Logger.i("current button id", String.valueOf(i));
            leftArrayOfButtons[i].setTranslationX(newLoc.mX);
            leftArrayOfButtons[i].setTranslationY(newLoc.mY);
            break;
        }
    }
}

ここで、アニメーションが正しく行われていないため、Object.OfObject() メソッドからビュー参照を渡して setLeftButtonLocationDynamic(final PathPoint newLoc,View v) で取得できるようにする必要があります。私はこれを行いますか?私はたくさん検索し、ObjectAnimator、ValueAnimator、ProperyViewHolder クラスのカスタム クラスを開発しようとしましたが、Google オープン ソースからコピーするとエラーが発生します。

4

1 に答える 1