FrameLayout mit runden Ecken nicht ganz rund

  • Hallo Leute,


    ich habe ein FrameLayout in welchem ich ein Bild zeige. Dabei möchte ich die Ecken abrunden.. Dazu gehe ich ähnlich vor wie hier


    Da ich aber ein bild zeige, habe ich als setBackground() das Bild und als setForeground() die shape mit den abgerundeten Ecken.. da funzt nur zur hälfte.. Die Ecken werden auf den ersten Blick abgerundet, jedoch sieht man die Ecken dann doch noch.. siehe









    Jemand eine Idee? Bin für hinweise Dankbar.


    Mfg MrT

  • Warum benutzt du für dein Bild kein ImageView?

    Ja, da gibt es mehrere Gründe:

    • ImageView sagt für setForeground erst ab API 23, ich habe ab API 19
    • Ich habe eine io.fotoapparat.CameraView instanz, welche von FrameLayout ableitet.
    • Bei dem CameraView habe ich das shape schon drübergelegt. Ich möchte dann das aufgenommene Bild genauso anzeigen wie es in der CameraView zu sehen war.
  • und das geht auch mit api19. Lade die Datei in ein Bitmap und gib es dem ImageView.

    Wenn ich die CameraView in ein ImageVIew ändere srteht da:

    Code
    Call requires API level 23 (current min is 19) : android.view.View#setForeground

    mit @SuppressLint("NewApi") gibt das folgerichtig einen Crash:


    Code
    java.lang.NoSuchMethodError: No virtual method setForeground(Landroid/graphics/drawable/Drawable;)V in class Landroid/widget/ImageView; or its super classes (declaration of 'android.widget.ImageView' appears in /system/framework/framework.jar)
  • Hier das Layout:


    Dann die Java:

    Wie gesagt, da ich ab API 19, meckert er über die setForeground(), weil kennt diese nicht. Vorschlag seitens Android Stuio:

    • @RequiresAPI(M)
    • @TargetApi(M)
    • Surround with if (VERSION.SDK_INT >= VERSION_CODES.M)
    • Supress @SupressLint("NewApi")

    Nummer 4 führt zum obigen Crash auf API zwischen 19 und 23.
    Auf neuen Geräten tut sich da nicht wirklich was ändern...

  • Zitat

    Hallo
    Frage zum Code.
    Was ist BitmapPhoto? Kenne ich nicht muss eine eigene Klasse sein. Wird mit " .bitmap" auch wirklich ein Bitmap daraus?
    Wie sieht es aus wenn du das forderground mal weg läßt wird da ein Bild angezeigt?


    In welches Layout wird denn das Bild von der Cam eingeblendet?


    Ansonsten wird dir wohl nichts anderes übrig bleiben die android Version abzufragen und entweder mit Vordergrund oder ohne zu arbeiten.
    Bei API 19 wirst du wohl selber die runden ecken vielleicht durch Transparenz auf dem Bitmat erzeugen müssen bevor du es anzeigst.

  • Was ist BitmapPhoto? Kenne ich nicht muss eine eigene Klasse sein. Wird mit " .bitmap" auch wirklich ein Bitmap daraus?

    BitmapPhoto ist ein Objekt von io.fotoapparat, wird geliefert bei whenDone()



    Wie sieht es aus wenn du das forderground mal weg läßt wird da ein Bild angezeigt?

    Ohne setForeground sieht das Bild ganz normal, mit Ecken aus.


    Zitat von jogiMuc

    In welches Layout wird denn das Bild von der Cam eingeblendet?

    das LiveBild? Es ist ein andere Fragment vorher. Das klappt das auch wunderbar mit CameraView.setForeground().

  • das LiveBild? Es ist ein andere Fragment vorher. Das klappt das auch wunderbar mit CameraView.setForeground().

    dann zeige uns doch mal wie das bei dem Live Bild aus sieht. Ich meine Layout und in Java.
    denn wenn dort das Fordergund geht muss es auch in deiner Klasse gehen.


    Oder ist das eine Lib die ihre eigenene Gradle fiele hat?


    Ps. mal noch eine Frage wie sieht den dein Fordergound Drawable aus "R.drawable.rounded_shape" .
    eigentlich müsste das ein Drawable sein und kein Xml Shape sein . Das müsste in den Ecken eine Farbe Haben und in der Mitte Transparenz, wenn du das als Maske über das Bild Legen willst. Um so Runde Ecken zu bekommen.



    setForeground


    added in API level 1 public void setForeground (Drawable foreground) Supply a Drawable that is to be rendered on top of all of the content in the view.

  • habs auf eine sehr einfache weise gelöst:



    ich habe zwei shape items,

    • bei dem einen sind die Ecken nach außen spitz
    • und bei dem anderen sind die innenEcken abgerundet.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!