web-dev-qa-db-de.com

Wie kann ich Schatten auf ImageView anwenden?

Ich möchte Schatten auf ImageView anwenden. Wenn ich Schatten auf eine TextView verwende, verstehe ich es, aber es wird nicht ImageView. Wie kann ich dieses Problem lösen?

Wir können auch CardView verwenden, um Hintergrund und Schatten mit abgerundeten Ecken zu erhalten. Um dies zu verwenden, müssen Sie die v7 CardView-Bibliothek als Abhängigkeit zum Projekt im build.gradle wie unten hinzufügen.

dependencies {
    compile 'com.Android.support:cardview-v7:23.0.1'
    -------
}

Hinweis: Ändern Sie 23.0.1 in der obigen Zeile mit der jeweiligen Version.

Also umgab ich die ImageView mit CardView, um einen Schatten wie unten darzustellen. 

<Android.support.v7.widget.CardView
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    card_view:cardBackgroundColor="@Android:color/white">

    <ImageView
        Android:id="@+id/dish_image"
        Android:layout_width="match_parent"
        Android:layout_height="120dp"
        Android:adjustViewBounds="true" />

</Android.support.v7.widget.CardView>

Es wird ein Schatten um das Bild eingefügt.

Hinweis: Ich weiß nicht, ob es sich um eine gute Lösung handelt. Ich bin ein Anfänger. ICH hat versucht, die CardView zu implementieren, die eine Idee zur Implementierung von .__ gibt. das gleiche für dieses. Wenn es nicht gut ist, aktualisieren Sie mich bitte mit dem Grund.

3

Dies ist der Präsentation von Romain Guy bei Devoxx entnommen, pdf gefunden hier .

Paint mShadow = new Paint(); 
// radius=10, y-offset=2, color=black 
mShadow.setShadowLayer(10.0f, 0.0f, 2.0f, 0xFF000000); 
// in onDraw(Canvas) 
canvas.drawBitmap(bitmap, 0.0f, 0.0f, mShadow);

Hoffe das hilft.

ANMERKUNGEN

Vergiss nicht Honeycomb und oben musst du setLayerType(LAYER_TYPE_SOFTWARE, mShadow) aufrufen, sonst wirst du deinen Schatten nicht sehen! (@Dmitriy_Boichenko)

SetShadowLayer funktioniert leider nicht mit der Hardwarebeschleunigung, was die Leistung erheblich verringert (@Matt Wear) 

Antwort aus hier

Für eine API, die größer als 21 ist .... Sie können es in xml in imageview oder Button versuchen: Lesen Sie hier auf der Entwicklerseite

Android:elevation="5dp"
2
Avinash Verma

Sie können eine Layerliste erstellen, die gezeichnet werden kann, und Ihre beiden Elemente (Drawables) für ein Bild und Ihren Schatten darin einfügen. 

Die Position und der Inhalt Ihres Schattenelements können sich je nach dem Ort ändern, an dem Sie den Schatten (oben, links, rechts, rechts und links usw.) und dem Stil Ihres Schattens anwenden möchten. 

1
stdout

Erstellen Sie eine Datei shadow_rect.xml

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <item >
        <shape
            Android:shape="rectangle">
            <solid Android:color="@Android:color/darker_gray" />
            <corners Android:radius="0dp"/>
        </shape>
    </item>
    <item Android:right="1dp"  Android:bottom="2dp">
        <shape
            Android:shape="rectangle">
            <solid Android:color="@Android:color/white"/>
            <corners Android:radius="1dp"/>
        </shape>
    </item>

</layer-list>

Und das als Android verwenden: background = "@ drawable/shadow_rect in Ihrer Imageview.

0
Harry