1

几天以来我一直被一个问题困扰,我什至几乎找不到有人谈论类似的事情。实际上,即使在阅读了很长的书籍和文章之后,我也很困惑,所以也许我只是想用火箭筒杀死蚊子:-),但我找不到任何解决方案。

这是我最后想要获得的:

我有一个图标列表,例如在 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,但我宁愿有一些规范。

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

非常感谢任何愿意提供帮助的人,

克里斯蒂亚诺

4

0 回答 0