2014-04-08 14 views
19

Uygulamamda, görüntüleri animasyon kullanarak taşımaya çalışıyorum. Görüntüyü (imageView2 veya imageView4) imageView1 ile canlandırmayı denediğimde, görüntü Düzenin dışına çıktığında kesiliyor. İşte Kaynak görüntü imageView2 veya imageView4 ve hedef görüntü AşağıdaclipChildren çalışmıyor

imageView1 benim XML'dir:

<?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> 

Ve animasyon kod aşağıda: En RelativeLayout ebeveynlerinin

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

cevap

28

biri olabilir Çocukları kırpma (bazen uyumluluk kütüphaneleri, örneğin NoSaveStateFrameLayout gibi bir gizem ViewGroup ekler). Bir görünümün tüm ebeveynler üzerinde klibi devre dışı bırakmak için başarı ile geçmişte böyle bir şey kullandım:

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

bunu denedi ama çalışmıyor ... – Vamshi

+1

Benim için çalıştı, yanıt için teşekkürler! Görünüşe göre, bir düzen eklediğinizde ve bu benim için sorun oluşturduğunda bazı görüşler eklendi. – shalafi

+0

benim için çalıştı. üzgün kullanmam gerekti :( – Sam

7

Son nedenle "RelativeLayout" dir. Bu nedenle, sorunu çözmek için RelativeLayout öğesini, büyük-büyük-olmayan kontrolün üst öğesi olarak kullanmayın. FrameLayout yerine, gibi: senin düzen "paddingXXX" etiketleri içeriyorsa

<!-- 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> 
1

Merhaba ~, bunları kaldırabilir ve yeniden deneyin. o

<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"> 

Yukarıdaki kod childView keser ve bir sonraki olmayacak ~ benim için bir iş:

<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"> 
2

i onun geç biliyorum, ama bu en basit komple cevabı:

sadece her koymak düzen:

android:clipChildren="false" 
    android:clipToPadding="false" 
+0

Cevabımda açıklandığı gibi, işletim sisteminin ViewGroup'daki görünümünü düzeninizde olmayan bir şekilde sardığı/enjekte ettiği durumlarda işe yaramaz. – roflharrison

+0

Evet Bu doğrudur – mhdjazmati