我了解,这是本地问题,但我已经与之抗争了1天,我想寻求您的帮助。
我有这样的“游戏”,用户可以通过swype移动项目,在这种情况下,我们正在从上到下进行swype。项目是实际的ImageViews。
在第一个图像上,我们可以看到实际swype之前的7个项目
物品会尽可能地下降,直到遇到另一个物品或该区域的边界(现在不可见)
在第二张图像上,项目已向下移动一次(只有那些没有障碍物的项目移动了其中的4个)
并且,第二次扫描后项目的最终位置:
现在的问题是:我无法解释为什么,但是恰好当我第一次从上到下进行一次Swype扫描并应用于将实际过渡到新位置的动画向下移动的这四个项目时,它们会在中途消失并出现在新的地方!
当我进行任何其他Swype操作时,无论朝哪个方向进行操作,任何项目都可以动画显示,没有任何问题。当我第二次刷到底部时,一切都很好。
我检查并检查了一下,动画正确完成,有正确的参数,并且动画过程中没有其他ImageViews,但是如果ImageViews顶部有障碍物,则某些东西会完全覆盖动画!这太奇怪了。
所有需要的代码如下:
动画无效
private void moveItem(final FieldItem item, final float x, final float y) {
// item to animate, transition X, transition Y
final RelativeLayout.LayoutParams oldParams = (LayoutParams) item
.getLayoutParams();
TranslateAnimation animation = new TranslateAnimation(0.0f, x, 0.0f, y);
animation.setDuration(500);
animation.setFillAfter(true);
animation.setAnimationListener(new AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
item.invalidate();
}
@Override
public void onAnimationRepeat(Animation animation) {
}
@Override
public void onAnimationEnd(Animation animation) {
item.clearAnimation();
//all following is just to remove old item from layout
//and put new item on the place where animation should have ended
//nothing which can affect, it works perfect with any other condition
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(
itemSize, itemSize);
params.leftMargin = (int) (oldParams.leftMargin + x);
params.topMargin = (int) (oldParams.topMargin + y);
gView.rLayout.removeView(item);
putItem(1, params);
gView.rLayout.invalidate();
//it's only ArrayList which contains copies of all Layout's children
//of ImageView class, for providing field moves logic, can't affect
//also recounts how many imageViews are in children of Layout
updateField();
//shows right margins, right amount of items on the field, they are always recounted depending of RelativeLayout children
Log.i("my_log", "Pos change, from " + oldParams.leftMargin + "/" + oldParams.topMargin + " to " + params.leftMargin + "/" + params.topMargin);
Log.i("my_log", "Size of field: " + field.size());
}
});
item.startAnimation(animation);
}
这里使用的布局:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/rootLayout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:clipChildren="false"
android:orientation="vertical" >
<com.crispy_chocolate.outofthebox.GameView
android:id="@+id/game"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:clipChildren="false" />
</RelativeLayout>
所以问题是-当在其他情况下相同的方法完全可以正常工作时,ImageView在动画的本地情况下如何消失?也许有人会帮助我。
最佳答案
显然,这是一个错误,因为如果我将任何imageview放在屏幕的底部,或写一些文本,动画就会开始完全正常。奇怪的。