ImageViewの標高が機能していません。このようにImageViewをXMLで宣言しました:
<ImageView
Android:id="@+id/image"
Android:layout_width="100dp"
Android:layout_height="50dp"
Android:elevation="10dp"
Android:src="@drawable/youtube" />
ImageViewで標高を適切に機能させるには、他に何をすればよいですか?
仰角の影は、ビューの描画可能な背景から派生します。 ImageViewに背景がない場合、影は表示されません。
その動作を変更する場合は、独自の ViewOutlineProvider
を構築し、View.setOutlineProvider()
を呼び出して設定する必要があります(これは簡単なことではありません)。
すべての最新バージョンで動作
親ビューとしてCardViewを使用します。 Use Android:background="@drawable/your_img"
の代わりに Android:src="@drawable/your_img"
ImageViewで。
<Android.support.v7.widget.CardView
Android:layout_gravity="center_horizontal"
app:cardElevation="5dp"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content">
<ImageView
Android:id="@+id/image"
Android:background="@drawable/your_img"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:contentDescription="@null" />
</Android.support.v7.widget.CardView>
CardViewを使用している場合は、CardViewの背景を透明のままにしてください。
<Android.support.v7.widget.CardView
Android:layout_gravity="center_horizontal"
app:cardElevation="@dimen/cardview_default_elevation"
app:cardBackgroundColor="@Android:color/transparent"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content">
<ImageView
Android:id="@+id/image"
Android:layout_width="100dp"
Android:layout_height="50dp"
Android:src="@drawable/youtube" />
</Android.support.v7.widget.CardView>
標高属性付きのシャドウ付きの丸い画像を表示するために、以下に示すように、シャドウなしで丸いドロアブルを作成しました。
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android" >
<item>
<shape Android:shape="oval">
<solid Android:color="@Android:color/white" />
</shape>
</item>
</layer-list>
以下に示すように、このDrawableをImageViewの背景として使用します。
<ImageView
Android:id="@+id/my_button"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:background="@drawable/round_shape"
Android:elevation="5dp"
Android:src="@drawable/center" />
これにより、影付きのImageViewが表示されます。
あなたの心に浮かぶかもしれない1つの質問は、なぜxml drawableを使用するかです。この質問に対するさまざまな答えについて他の開発者が述べたように、影は背景と境界線のある背景から形成され、より具体的になります。 Xml drawableは、境界線付きの背景を作成するのに役立ちます。境界線付きの背景から、elevation属性でシャドウを作成できます。
Android:srcを使用する代わりに、影を表示するにはAndroid:backgroundに変更する必要があります。
<ImageView
Android:id="@+id/image"
Android:layout_width="100dp"
Android:layout_height="50dp"
Android:elevation="10dp"
Android:background="@drawable/youtube" />
BladeCoderの答え の明確化に加えて、Android:outlineProvider="bounds"
をImageView
に適用すると、影が表示されます。
Lollipop
では、標高を設定して機能します。 _pre-Lollipop,
_については、自分でシャドウを実装する必要があります。 _Support-v4
_にはViewCompat.setElevation(view, value)
メソッドがあります。ソースをチェックする場合、実装はありません。 (少なくとも、執筆時点では)。