8

Für die frühere L Vorschau gab es einige Beispiele wie unten gezeigt, die Sie Ihrem Code hinzufügen können, um einen FAB (Floating Action Button) zu verwenden.Wie man setOutlineProvider anstelle von setOutline in Lollipop verwendet

Leider kann ich diesen Code nicht zur Implementierung eines FAB verwenden, da die setOutline-Methode nicht mehr unterstützt wird, aber anscheinend durch eine alternative Methode 'fab.setOutlineProvider (ViewOutlineProvider);' ersetzt wurde. könnte jemand erklären, wie man das benutzt? ...

Es ist wahrscheinlich etwas wirklich einfaches, dass ich vermisse, aber jede Hilfe würde sehr geschätzt werden.

// Outline 
int size = getResources().getDimensionPixelSize(R.dimen.fab_size); 
Outline outline = new Outline(); 
outline.setOval(0, 0, size, size); 

Button fab = (Button) findViewById(R.id.fab); 
fab.setOutline(outline); 
fab.setClipToOutline(true); 

Antwort

27

einfach die @ianhanniballake Antwort zu vervollständigen:

Button fab = (Button) findViewById(R.id.fab); 
//Outline outline = new Outline(); 
//outline.setOval(0, 0, size, size); 
//fab.setOutline(outline); 
ViewOutlineProvider viewOutlineProvider = new ViewOutlineProvider() { 
     @Override 
     public void getOutline(View view, Outline outline) { 
      // Or read size directly from the view's width/height 
      int size = getResources().getDimensionPixelSize(R.dimen.fab_size); 
      outline.setOval(0, 0, size, size); 
     } 
    }; 
fab.setOutlineProvider(viewOutlineProvider); 
+2

Sie sollten auch vorher die aktuelle Version des Geräts überprüfen, da diese Methode nur nach Android L unterstützt wird. – russellhoff

9

Per customizing view shadows and outlines training:

können Sie erstellen oval und rechteckig mit abgerundeten Ecken und umreißt die Methoden in der Outline Klasse. Der Standardumrissanbieter für Ansichten ruft die Gliederung aus dem Hintergrund der Ansicht ab. Um zu verhindern, dass eine Ansicht einen Schatten wirft, legen Sie ihren Umrissanbieter auf null fest.

So Ihre ViewOutlineProvider braucht nur setOval(0, 0, size, size) auf dem outline Parameter getOutline() zu nennen:

public void getOutline (View view, Outline outline) { 
    // Or read size directly from the view's width/height 
    int size = getResources().getDimensionPixelSize(R.dimen.fab_size); 
    outline.setOval(0, 0, size, size); 
} 
+0

Was es genau macht? Zeigen Sie den richtigen Schatten der Ansicht? –

+2

@androiddeveloper - das ist richtig. Standardmäßig wird der Schatten mit den Grenzen Ihrer Ansicht umgewandelt, was sich hervorragend für undurchsichtige rechteckige Ansichten eignet, die ihre gesamten Grenzen ausfüllen, aber offensichtlich nicht so sehr für (in diesem Fall) kreisförmige Ansichten. – ianhanniballake

+0

Ich sehe. Also was sollte ich verwenden, wenn ich eine seltsame Form für eine Ansicht oder eine Ansicht habe, die ihre Form ändert? –

Verwandte Themen