2

我正在尝试构建一个tooltip带有阴影的图像,如下图所示:

在此处输入图像描述

我可以通过使用 Image as 来做到这一点background。但我无法对其应用阴影。所以,在搜索之后我找到了这篇文章,它使用MaterialCardView并应用MaterialShapeDrawable它作为一个background.

我尝试了以下代码:

    val shapeDrawable = MaterialShapeDrawable()
    val shapeAppearanceModel =
        ShapeAppearanceModel.builder().setBottomEdge(TriangleEdgeTreatment(20f, false)).build()
    shapeDrawable.shapeAppearanceModel = shapeAppearanceModel
    materialDialog.background = shapeDrawable

XML 文件:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="@dimen/width_custom_marker"
    android:layout_height="100dp"
    android:padding="16dp"
    tools:ignore="Overdraw">

    <com.google.android.material.card.MaterialCardView
        android:id="@+id/materialCard"
        android:layout_width="@dimen/width_custom_marker"
        android:layout_height="50dp" />
</RelativeLayout>

我的问题是,在为这个对象设置inside标志时,它不能按预期工作。但是,将标志设置为正常工作。falseTriangleEdgeTreatment(30f, true)true

TriangleEdgeTreatment(30f,假)

在此处输入图像描述

TriangleEdgeTreatment(30f,真)

在此处输入图像描述

提前致谢!

4

1 回答 1

2

我可以使用以下方法实现它:

  <LinearLayout
      android:clipChildren="false"
      android:clipToPadding="false"
      android:padding="16dp"
      ..>

        <com.google.android.material.card.MaterialCardView
         ../>

并应用TriangleEdgeTreatment

float size = getResources().getDimension(R.dimen.triangle_size); //16dp
TriangleEdgeTreatment triangleEdgeTreatment = new TriangleEdgeTreatment(size,false);

MaterialCardView cardView = findViewById(R.id.card);
cardView.setShapeAppearanceModel(cardView.getShapeAppearanceModel()
    .toBuilder()
    .setBottomEdge(triangleEdgeTreatment)
    .build());

在此处输入图像描述

于 2020-05-24T20:26:02.943 回答