轴Z上的Android相机动画

时间:2013-06-22 10:05:40

标签: android animation camera z-axis

我几天都遇到了问题,我几乎找不到有人说类似的东西。实际上,即使阅读了很长的书籍和文章,我也很困惑,所以也许我只想用火箭筒杀死一只蚊子:-),但我找不到任何解决办法。

这是我想在最后获得的:

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

我试着把这样的图标放在那里(这只是一个2x4矩阵,应该看看问题)

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
          android:orientation="vertical"
          android:layout_width="fill_parent"
          android:layout_height="fill_parent" android:paddingTop="50dp">
<ScrollView
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:id="@+id/scrollView">
    <LinearLayout
            android:orientation="vertical"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent">
        <RelativeLayout
                android:layout_width="fill_parent"
                android:layout_height="wrap_content" android:layout_gravity="center_horizontal"
                android:gravity="center_horizontal" android:layout_margin="5dp">
            <package.libraries.BoxX
                  android:layout_width="wrap_content"
                  android:layout_height="wrap_content"
                  android:id="@+id/boxX"
                  android:src="@drawable/icon1"
                  android:focusableInTouchMode="false" android:layout_weight="1" android:layout_gravity="center"
                  android:clickable="false" android:longClickable="false"
                  android:layout_alignParentLeft="false" android:layout_alignWithParentIfMissing="false"
                  android:layout_margin="10dp"/>
            <package.libraries.BoxX
                  android:layout_width="wrap_content"
                  android:layout_height="wrap_content"
                  android:id="@+id/boxX2"
                  android:src="@drawable/icon2"
                  android:focusableInTouchMode="false" android:layout_gravity="center" android:layout_weight="1"
                  android:longClickable="false" android:layout_alignParentRight="false"
                  android:layout_alignParentBottom="false" android:layout_alignParentLeft="false"
                  android:layout_alignParentTop="false"
                  android:adjustViewBounds="false" android:layout_toRightOf="@+id/boxX"
                  android:baselineAlignBottom="false"
                  android:layout_margin="10dp"/>
        </RelativeLayout>
        <RelativeLayout
                android:layout_width="fill_parent"
                android:layout_height="wrap_content" android:layout_gravity="center_horizontal"
                android:gravity="center_horizontal" android:layout_margin="5dp">
            <view android:layout_width="wrap_content"
                  android:layout_height="wrap_content"
                  class="package.libraries.BoxX" android:id="@+id/boxX3" android:src="@drawable/icon3"
                  android:layout_margin="10dp"/>
            <view android:layout_width="wrap_content"
                  android:layout_height="wrap_content"
                  class="package.libraries.BoxX" android:id="@+id/BoxX4" android:focusableInTouchMode="false"
                  android:src="@drawable/icon4" android:layout_toRightOf="@+id/boxX3" android:layout_margin="10dp"/>
        </RelativeLayout>
    </LinearLayout>
</ScrollView>

其中package.libraries.BoxX是我的自定义视图,它扩展了ImageView并运行动画。这就是我创建和运行动画的方式:

@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;
}

XxFlipAnimator是我的动画类,派生自this,具有此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);
}

使用z轴获得缩放,这是第一个问题:这是对的吗?如果这是使图标“增长”的正确方法,这是真正的z轴范围?我只是通过实验找到了常数1100,但我更愿意有一些规格。

顺便提一下,真正的问题是:当我按下图标时,动画开始很好,图标尺寸开始增长,但是当它们到达父亲相对布局时,它们会夹紧。不是与相对布局相关的东西,因为我试图将其更改为线性并且结果是相同的...所以关键是:是否可以让动画超出动画视图的父布局的维度?

非常感谢任何有帮助的人,

克里斯蒂

0 个答案:

没有答案