web-dev-qa-db-ja.com

ImageViewで標高が機能しない

ImageViewの標高が機能していません。このようにImageViewをXMLで宣言しました:

<ImageView
        Android:id="@+id/image"
        Android:layout_width="100dp"
        Android:layout_height="50dp"
        Android:elevation="10dp"
        Android:src="@drawable/youtube" />

ImageViewで標高を適切に機能させるには、他に何をすればよいですか?

26
Karthik

仰角の影は、ビューの描画可能な背景から派生します。 ImageViewに背景がない場合、影は表示されません。

その動作を変更する場合は、独自の ViewOutlineProvider を構築し、View.setOutlineProvider()を呼び出して設定する必要があります(これは簡単なことではありません)。

26
BladeCoder

すべての最新バージョンで動作

親ビューとして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>
9
Shyam Kumar

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>
2
Joiner Sá

標高属性付きのシャドウ付きの丸い画像を表示するために、以下に示すように、シャドウなしで丸いドロアブルを作成しました。

<?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属性でシャドウを作成できます。

2
Tarun

Android:srcを使用する代わりに、影を表示するにはAndroid:backgroundに変更する必要があります。

 <ImageView
    Android:id="@+id/image"
    Android:layout_width="100dp"
    Android:layout_height="50dp"
    Android:elevation="10dp"
    Android:background="@drawable/youtube" />
1
Bhavin Shah

BladeCoderの答え の明確化に加えて、Android:outlineProvider="bounds"ImageViewに適用すると、影が表示されます。

1
azizbekian

Lollipopでは、標高を設定して機能します。 _pre-Lollipop,_については、自分でシャドウを実装する必要があります。 _Support-v4_にはViewCompat.setElevation(view, value)メソッドがあります。ソースをチェックする場合、実装はありません。 (少なくとも、執筆時点では)。

0