是否可以使用一个ValueAnimator或ObjectAnimator为Matrix中的多个值设置动画?

时间:2016-07-14 04:02:12

标签: android

我正在尝试更改Matrix对象的X和Y比例以及ImageView的变化形状,使其看起来像ImageView只是一个蒙版。

所以为了做到这一点,我会改变ImageView矩阵的比例,以回应ImageView本身不断变化的比例。

到目前为止,我使用单个ValueAnimator来更改Matrix的X刻度并且它有效:

final ValueAnimator xScaleIterationMatrix = ValueAnimator.ofFloat((1/xScaleSrcToDst)*initMatDstVals[0], initMatDstVals[0]);
                                    final Matrix mat = initMatrixDst;
xScaleIterationMatrix.setDuration(animDurationCommon);
xScaleIterationMatrix.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
    @Override
    public void onAnimationUpdate(ValueAnimator valueAnimator) {
        mat.setScale((float)xScaleIterationMatrix.getAnimatedValue(), initMatDstVals[4]);
        toReplace.interfaceImageView().setImageMatrix(mat);
        }
    });
xScaleIterationMatrix.start();

但这只是一个ValueAnimator,而且只有Matrix的一个属性(scaleX)。

我正在考虑使用2个ValueAnimators(更改scaleX和scaleY [同时在后者中设置矩阵])来做到这一点,但我希望更简单。

我可以使用ObjectAnimator执行此任务吗?

编辑:2 ValueAnimators提案的示例代码:

final ValueAnimator xScaleIterationMatrix = ValueAnimator.ofFloat(xScaleSrcToDst * initMatSrcVals[0], initMatSrcVals[0]);
xScaleIterationMatrix.setDuration(animDurationCommon);
xScaleIterationMatrix.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
    @Override
    public void onAnimationUpdate(ValueAnimator valueAnimator) {
        resultXScale = (float)xScaleIterationMatrix.getAnimatedValue();
        }
    });
xScaleIterationMatrix.start();

final ValueAnimator yScaleIterationMatrix = ValueAnimator.ofFloat(yScaleSrcToDst * initMatSrcVals[4], initMatSrcVals[4]);
yScaleIterationMatrix.setDuration(animDurationCommon);
yScaleIterationMatrix.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
    @Override
    public void onAnimationUpdate(ValueAnimator valueAnimator) {
        resultYScale = (float)yScaleIterationMatrix.getAnimatedValue();
        mat.setScale(resultXScale, resultYScale);
        source.interfaceImageView().setImageMatrix(mat);
        }
    });
yScaleIterationMatrix.start();

0 个答案:

没有答案