Z轴上的Android相机动画

Z轴上的Android相机动画,android,animation,camera,z-axis,Android,Animation,Camera,Z Axis,几天以来,我一直在思考一个问题,我几乎找不到有人在谈论类似的事情。事实上,我读了很长的书和文章后也很困惑,所以也许我只是想用火箭筒杀死一只蚊子:-),但我找不到任何解决办法 这就是我最后想要得到的: 我有一个图标列表,比如laucher中的图标,比如说在一个2行16列的矩阵中。当我按下其中一个图标时,动画应该开始将按下的图标缩放到全屏。实际上,在动画期间不需要维护图标图形,它甚至可以是一个从图标大小放大到全屏的框 我试着这样放置图标(这只是一个2x4矩阵,足以看出问题所在) XxFlipAnim

几天以来,我一直在思考一个问题,我几乎找不到有人在谈论类似的事情。事实上,我读了很长的书和文章后也很困惑,所以也许我只是想用火箭筒杀死一只蚊子:-),但我找不到任何解决办法

这就是我最后想要得到的:

我有一个图标列表,比如laucher中的图标,比如说在一个2行16列的矩阵中。当我按下其中一个图标时,动画应该开始将按下的图标缩放到全屏。实际上,在动画期间不需要维护图标图形,它甚至可以是一个从图标大小放大到全屏的框

我试着这样放置图标(这只是一个2x4矩阵,足以看出问题所在)

XxFlipAnimator是我的动画类,源于,它具有以下ApplyTrasformation方法:

   protected void applyTransformation(float interpolatedTime, Transformation t) {
            final Matrix matrix = t.getMatrix();

    camera.save();
    camera.translate(0.0f, 0.0f, (float) (1100.0 * (0.5f - interpolatedTime)));

    if ((interpolatedTime < 0.5f) || !(zoom))
        camera.rotateY(degrees);
    camera.getMatrix(matrix);
    camera.restore();

    matrix.preTranslate(-centerX, -centerY);
    matrix.postTranslate(centerX, centerY);
}
受保护的无效应用程序转换(浮点插值时间,转换t){
最终矩阵=t.getMatrix();
camera.save();
平移(0.0f,0.0f,(浮点)(1100.0*(0.5f-插值时间));
如果((插值时间<0.5f)| |!(缩放))
摄像机旋转(度);
获取矩阵(矩阵);
照相机。还原();
矩阵。预转换(-centerX,-centerY);
矩阵。后翻译(centerX、centerY);
}
z轴的变焦是负的,第一个问题来了:这对吗?如果这是使图标“增长”的正确方法,那么哪个是真正的z轴范围?我刚刚在实验中发现了常数1100,但我更喜欢有一些规范

顺便说一下,真正的问题是:当我按下图标时,动画开始得很好,图标尺寸开始增长,但当它们到达父相对布局时,它们会夹紧。与相对布局无关,因为我尝试将其更改为线性,结果是相同的…所以问题是:动画是否可能超出动画视图父布局的尺寸

非常感谢任何愿意帮忙的人


<克里斯蒂亚诺> /P>新信息:我尝试了一个线性布局,在50dP上填充“ALL”,中间有一个图标。动画将扩展到填充区域,而不是所有屏幕。所以问题只是…如何制作一个动画,在最后填充所有的屏幕,无论哪个布局包含要设置动画的视图?我在最初的问题中留下了代码,只是因为它可能对某些人有用。另一个更新:尝试在布局本身上运行动画,结果是一样的。布局增长到其父限制。
@Override
public void onClick(View view) {
    XxFlipAnimator animator = new XxFlipAnimator(BoxX.this, strDrw, endDrw,
            BoxX.this.getWidth() / 2, BoxX.this.getHeight() / 2, true);
    animator.setFillAfter(true);
    animator.setFillEnabled(true);
    animator.setDuration(500);
    BoxX.this.startAnimation(animator);
    mStatus = status.CLICKED;
}
   protected void applyTransformation(float interpolatedTime, Transformation t) {
            final Matrix matrix = t.getMatrix();

    camera.save();
    camera.translate(0.0f, 0.0f, (float) (1100.0 * (0.5f - interpolatedTime)));

    if ((interpolatedTime < 0.5f) || !(zoom))
        camera.rotateY(degrees);
    camera.getMatrix(matrix);
    camera.restore();

    matrix.preTranslate(-centerX, -centerY);
    matrix.postTranslate(centerX, centerY);
}