java - android setclipchildren not working




親ビューの外に出るとAndroidビューが消える (4)

ImageViewが属するViewGroupを探し、ViewGroup.setClipChildren ViewGroup.setClipChildren(false)を適用します。 デフォルトでは、子の描画は親ViewGroupの境界に制限されています。

私はこのLinearLayoutの中にLinearLayoutとImageViewを持っています。

ImageViewの翻訳エフェクトがあります。

// v = ImageView    
ObjectAnimator animation2 = ObjectAnimator.ofFloat(v, "translationY", 200);
                        animation2.setDuration(3000);
                        animation2.setTarget(v);
                        animation2.start();

アニメーションは機能しますが、ImageViewがLinearLayoutの外に出ると消えていきます。

あなたはここで問題を見ることができます: http://screenr.com/zoAH : http://screenr.com/zoAH

LinearLayoutの高さを変更せずにどのように修正できますか?


clipChildrenとclipToPaddingという2つの属性が存在する可能性があります。 オブジェクトがアニメーション化される境界を持つ各親ViewGroupに対して、clipChildrenをfalseに設定する必要があります。 あなたはまた、直接の親にclipToPaddingを設定する必要があります(そしてそれ以上のことはありますが、まだそれについてのケースは見ていません)。

両方の属性をXMLに設定できます

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

コード内

viewGroup.setClipChildren(false);
viewGroup.setClipToPadding(false);

私の場合、clipChildrenは何もしませんでしたが、 clipToPadding="false"は問題を修正しました。 Go figure。


私の実装。 それはおそらく誰かを助けることができます:

public static void setAllParentsClip(View v, boolean enabled) {
    while (v.getParent() != null && v.getParent() instanceof ViewGroup) {
        ViewGroup viewGroup = (ViewGroup) v.getParent();
        viewGroup.setClipChildren(enabled);
        viewGroup.setClipToPadding(enabled);
        v = viewGroup;
    }
}

setAllParentsClip(yourView, false);呼び出しsetAllParentsClip(yourView, false); すべての親でクリッピングを無効にします。





android-animation