如何为居住在孩子之上的父母渲染弯曲边框?

时间:2016-09-02 11:26:56

标签: android android-layout android-fragments

  

我希望在视图上有一个内部弯曲的边框,即使我添加/交换/删除子项到内部/从中,它也会保持在顶部。

以下是我的尝试:

  • 为黑色边框(内部弯曲边框)创建XML resource
  • 将其设为父background
  • FrameLayout
  • FragmentImageView添加到FrameLayout
  • ImageView bcoz上执行此操作此Fragment将在运行时交换,使用不同颜色的片段,并且下滑动< / strong>黑色边框,而不是滑过它。
  

孩子总是被父母吸引!

enter image description here

  

这就是我的期望

enter image description here

enter image description here

XML资源文件(用于内部弯曲边框)

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:top="0dp" android:left="0dp" android:bottom="0dp" android:right="0dp">
        <shape android:shape="rectangle">
            <solid android:color="#ff000000"/>
        </shape>
    </item>
    <item android:top="0dp" android:left="0dp" android:bottom="0dp" android:right="0dp">
        <shape android:shape="rectangle">
            <solid android:color="#ffffffff"/>
            <stroke android:width="3dp"
                android:color="#ff000000" />
            <corners android:bottomRightRadius="15dp"
                android:bottomLeftRadius="15dp"
                android:topLeftRadius="15dp"
                android:topRightRadius="15dp"/>
        </shape>
    </item>
</layer-list>
  

有没有办法在没有RelativeLayout的情况下做到这一点我们可以有两个独立的孩子,一个用于边框,另一个用于imageView?

1 个答案:

答案 0 :(得分:0)

就像pskink mentioned in the comment一样,您可以通过覆盖draw中的dispatchDrawViewGroup来轻松实现这一目标。

你要做的是:

  1. background
  2. 中删除FrameLayout drawable
  3. 而不是常规的FrameLayout使用类似的东西:
  4. public class RoundedBorderFrameLayout extends FrameLayout {
    
        // ... constructors and setting up Paint and Rect objects (for drawing)
    
        @Override
        public void draw(Canvas canvas) {
            super.draw(canvas); // AFTER super call!!
            //... draw black rounded border on Canvas object
        }
    }