在我的应用程序中,我尝试使用动画来移动图像。
当我尝试将图像(imageView2
或imageView4
)动画化为imageView1
时,图像从布局中移出时正在剪切。
在这里,源图像是imageView2
或imageView4
,目标图像是imageView1
以下是我的XML:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/animRL"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:clipChildren="false"
android:clipToPadding="false"
android:orientation="vertical" >
<ImageView
android:id="@+id/imageView1"
android:layout_width="40dp"
android:layout_height="60dp"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:src="@drawable/deskcard" />
<RelativeLayout
android:id="@+id/baselayout"
android:layout_width="match_parent"
android:layout_height="120dp"
android:layout_alignParentRight="true"
android:layout_below="@+id/imageView1"
android:clipChildren="false"
android:clipToPadding="false" >
<RelativeLayout
android:id="@+id/layout"
android:layout_width="match_parent"
android:layout_height="100dp"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="5dp"
android:clipChildren="false"
android:clipToPadding="false"
android:gravity="bottom|center" >
<ImageView
android:id="@+id/imageView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignTop="@+id/imageView4"
android:layout_marginLeft="118dp"
android:clipChildren="false"
android:clipToPadding="false"
android:src="@drawable/test" />
<ImageView
android:id="@+id/imageView4"
android:layout_width="40dp"
android:layout_height="60dp"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_marginBottom="16dp"
android:layout_marginRight="104dp"
android:clipChildren="false"
android:clipToPadding="false"
android:src="@drawable/test1" />
</RelativeLayout>
</RelativeLayout>
</RelativeLayout>
动画代码如下:
imageView4.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
int sourceCoords[] = new int[2];
int targetCoords[] = new int[2];
int xDelta;
int yDelta;
imageView4.getLocationOnScreen(sourceCoords);
image.getLocationOnScreen(targetCoords);
xDelta = targetCoords[0] - sourceCoords[0];
yDelta = targetCoords[1] - sourceCoords[1];
TranslateAnimation animation = new TranslateAnimation(0, xDelta, 0, yDelta);
animation.setDuration(400);
animation.setFillAfter(false);
animation.setAnimationListener(new MyAnimationListener());
imageView4.startAnimation(animation);
}
});
最佳答案
RelativeLayout的父级之一可能是剪切子级(有时兼容性库会添加一个神秘的ViewGroup,例如NoSaveStateFrameLayout)。过去,我成功使用过类似的方法来禁用 View 的所有父级上的剪辑:
public void disableClipOnParents(View v) {
if (v.getParent() == null) {
return;
}
if (v instanceof ViewGroup) {
((ViewGroup) v).setClipChildren(false);
}
if (v.getParent() instanceof View) {
disableClipOnParents((View) v.getParent());
}
}