显示由另一个ImageView覆盖的ImageView的一部分

时间:2017-11-13 08:24:11

标签: android transparent

我有一个Framelayout,其中第一个元素是一个ImageView,其高度和宽度匹配父级,并且id为A.第二个元素也是一个ImageView,其高度和宽度也匹配父级,并且id为B. element是一个高度和宽度为100 dp的视图,可以移动到整个屏幕,并且id为C.我在背景C中使用透明色,所以在C中我们应该看到B,因为B在A之上。但是我想在C里面展示A,我该怎么做?

4 个答案:

答案 0 :(得分:0)

如果您不想显示B,您可以将B的可见性设置为不可见或消失。或者您可以将A替换为B.因为框架布局像堆栈一样工作首先放在底部。所以你输入这种格式B-> A-> - > C

答案 1 :(得分:0)

使用相对布局来包装framelayout,然后您可以使用上面的布局,然后使用视图的可见性

答案 2 :(得分:0)

这会有所帮助。

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">

<ImageView
    android:id="@+id/a"
    android:src="@drawable/ic_networking"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

<ImageView
    android:id="@+id/b"
    android:visibility="gone"
    android:src="@drawable/dailymetricsin"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

<View
    android:background="#90606060"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>

您可以根据背景中应显示的A(或)B隐藏和显示ImageView。

答案 3 :(得分:0)

如果我理解你的问题,你基本上想让View C和View B的交集透明,看看它们背后的View A.。

在这种情况下,可能足以获得视图C的可见矩形:

Paint paint = new Paint();
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));

@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas)
    canvas.drawRect(rect, paint);
}

然后您可以在视图B上将此矩形绘制为透明蒙版,这样您就可以看到视图B后面的视图A.您可以通过覆盖视图B的onDraw方法来实现它。

setWillNotDraw(false);
setLayerType(LAYER_TYPE_HARDWARE, null)

这将实现与此类似的功能: Views

您也不应忘记为正在绘制的视图禁用硬件加速(在本例中为视图B),并告诉视图您将手动绘制它:

{{1}}

可在此处找到进一步的解释和示例: Android canvas: draw transparent circle on image