几天以来我一直被一个问题困扰,我什至几乎找不到有人谈论类似的事情。实际上,即使在阅读了很长的书籍和文章之后,我也很困惑,所以也许我只是想用火箭筒杀死蚊子:-),但我找不到任何解决方案。
这是我最后想要获得的:
我有一个图标列表,例如在 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,但我宁愿有一些规范。
顺便说一句,真正的问题是:当我按下图标时,动画开始良好,图标尺寸开始增长,但是当它们到达父级相对布局时,它们会夹紧。与相对布局无关,因为我试图将其更改为线性并且结果是相同的......所以重点是:是否可以让动画超出动画视图的父布局的维度?
非常感谢任何愿意提供帮助的人,
克里斯蒂亚诺