clipChildren不工作

在我的应用程序中,我试图使用animation来移动图像。 当我尝试将图像( imageView2imageView4 )设置为imageView1animation时,图像正在移出布局。 这里源图像是imageView2imageView4 ,目标图像是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> 

animation代码如下:

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

Solutions Collecting From Web of "clipChildren不工作"

您的RelativeLayout的父母之一可能会剪裁儿童(有时兼容性库添加一个神秘的ViewGroup,例如NoSaveStateFrameLayout )。 在过去,我曾经使用过类似的东西,禁止所有视图的父母剪辑:

 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()); } } 

最后的原因是“RelativeLayout”。 所以为了解决这个问题,不要使用RelativeLayout作为你父母的大于父母的控件。 相反,FrameLayout,如:

 <!-- it's ok as grand parent --> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:clipChildren="false"> <!-- parent must not be a RelativeLayout --> <FrameLayout android:layout_width="match_parent" android:layout_height="38dp" android:layout_alignParentBottom="true" android:layout_marginBottom="9dp"> <!-- Your Larger-than-parent View --> <View android:layout_width="56dp" android:layout_height="138dp" android:layout_gravity="center" android:background="@android:color/black" /> </FrameLayout> </RelativeLayout> 

嗨〜如果您的布局包含“paddingXXX”标签,则可以将其删除并重试。 这对我有用〜

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:clipChildren="false" android:gravity="center_vertical" android:padding="8dp" android:orientation="horizontal"> 

上面的代码会剪切childView,接下来不会:

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:clipChildren="false" android:gravity="center_vertical" android:orientation="horizontal"> 

我知道它晚了,但这是最简单的完整答案:

只是把每个布局:

  android:clipChildren="false" android:clipToPadding="false"