Image bitmap avec coins arrondis avec traits

J'ai une image avec des bords tranchants. Entrez la description de l'image ici

The tile_mode.xml

  • Android - Animate a topMargin / bottomMargin d'une vue / etc dans LinearLayout ou RelativeLayout
  • Minimiser Android GLSurfaceView lag
  • Ajouter une transition à un AnimationDrawable
  • Android: manipule le rappel OAuth à l'aide du filtre intentionnel
  • Écouteur de changement de mode Ringer Récepteur de diffusion?
  • L'application de mise à jour programmée d'Android lorsqu'une nouvelle version est disponible
  • <?xml version="1.0" encoding="utf-8"?> <bitmap xmlns:android="http://schemas.android.com/apk/res/android" android:src="@drawable/background" android:tileMode="repeat"> </bitmap> 

    Le back.xml

     <?xml version="1.0" encoding="UTF-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/tile_mode" /> <item> <shape> <solid/> <stroke android:width="1dip" android:color="#225786" /> <corners android:radius="10dip"/> <padding android:left="0dip" android:top="0dip" android:right="0dip" android:bottom="0dip" /> </shape> </item> 

    Layout.xml

     <LinearLayout android:id="@+id/frame1" android:background="@drawable/back" android:layout_width="fill_parent" android:layout_height="wrap_content"> </LinearLayout> 

    Je définis l'image en arrière-plan dans cette mise en page et je dessine une bordure, mais le problème est que l'image est carrée avec des bords tranchants et la bordure que je dessine dans le xml est des coins arrondis. Alors, comment faire l'image aussi avec des coins arrondis?

  • Périphérique virtuel Android - Armeabi-v7a vs x86_64
  • Rare NullPointerException dans GoogleApiClient utilisant Firebase
  • Aucune option de méthode DataTypeConverter dans Android
  • Comment obtenir l'expéditeur d'une intention?
  • 'IllegalStateException: l'activité a été détruite' lorsque 'getSupportFragmentManager ()' a appelé après l'activité de redémarrage
  • Forcer adjustPan dans l'activité contenant ScrollView
  • 8 Solutions collect form web for “Image bitmap avec coins arrondis avec traits”

    Il s'agit d'une solution dans laquelle vous devez vous occuper de votre make round to your main layout background et, à l'intérieur, conservez votre imageview with your desire image:

    Quelque chose comme ci-dessous:

    Back.xml

    Cela fera de votre image un angle rond

     <?xml version="1.0" encoding="UTF-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <stroke android:width="1dp" android:color="#dd7b7a"/> <corners android:bottomRightRadius="10dp" android:bottomLeftRadius="10dp" android:topLeftRadius="10dp" android:topRightRadius="10dp"/> <solid android:color="#dd7b7a"/> </shape> 

    Tile_mode.xml

     <?xml version="1.0" encoding="utf-8"?> <bitmap xmlns:android="http://schemas.android.com/apk/res/android" android:src="@drawable/background" android:tileMode="repeat" /> 

    Layout.xml

     <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:gravity="center" > <LinearLayout android:padding="4dip" android:orientation="vertical" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/back" android:gravity="center_horizontal" > <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/tile_mode" /> </LinearLayout> </LinearLayout> 

    Actualisé

    Après avoir creusé beaucoup, j'ai rencontré une solution qui a déjà été publiée sur stackoverflow

    Modification de l'image en tant que coin arrondi

    Comment faire pour qu'un ImageView ait des coins arrondis

    étape 1@

    Main.xml

      <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" tools:context=".MainActivity" > <ImageView android:id="@+id/image" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" /> </RelativeLayout> 

    Étape 2@

    Créez une fonction qui s'arrondit sur votre canevas en utilisant un canevas.

     public static Bitmap getRoundedCornerBitmap(Bitmap bitmap, int pixels) { Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), bitmap .getHeight(), Config.ARGB_8888); Canvas canvas = new Canvas(output); final int color = 0xff424242; final Paint paint = new Paint(); final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight()); final RectF rectF = new RectF(rect); final float roundPx = pixels; paint.setAntiAlias(true); canvas.drawARGB(0, 0, 0, 0); paint.setColor(color); canvas.drawRoundRect(rectF, roundPx, roundPx, paint); paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN)); canvas.drawBitmap(bitmap, rect, rect, paint); return output; } 

    étape 3@

     public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); ImageView image=(ImageView)findViewById(R.id.image); Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.testing); image.setImageBitmap(getRoundedCornerBitmap(bitmap, 20)); 

    La réponse de RobinHood a fonctionné pour moi avec un changement en raison d'une erreur que je recevais au sujet de l'affectation variable.

    J'ai dû changer de ligne:

      paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN)); 

    À cette ligne:

      paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); 

    Faire mon code complet:

     public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN); setContentView(R.layout.activity_main); TextView textViewTitle = (TextView) findViewById(R.id.MYTEXTIDHERE); textViewTitle.setText("Some Text"); ImageButton imageButtonSetter = (ImageButton) findViewById(R.id.MYIMAGEIDHERE); Bitmap myBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.MYIMAGENAMEHERE); imageButtonSetter.setImageBitmap(getRoundedCornerBitmap(myBitmap, 40)); } public static Bitmap getRoundedCornerBitmap(Bitmap bitmap, int pixels) { Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), bitmap .getHeight(), Config.ARGB_8888); Canvas canvas = new Canvas(output); final int color = 0xff424242; final Paint paint = new Paint(); final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight()); final RectF rectF = new RectF(rect); final float roundPx = pixels; paint.setAntiAlias(true); canvas.drawARGB(0, 0, 0, 0); paint.setColor(color); canvas.drawRoundRect(rectF, roundPx, roundPx, paint); paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); canvas.drawBitmap(bitmap, rect, rect, paint); return output; } 

    En fait, il existe une bibliothèque que j'ai faite qui répond exactement à vos besoins et que vous n'avez pas à vous soucier de ces fichiers xml.

    https://github.com/pungrue26/SelectableRoundedImageView

    Avec ce projet open-source, vous pouvez définir différents rayons sur chaque angle et définir des bordures (largeur et couleurs) , etc., comme ci-dessous. J'espère que cela vous aidera.

    Rounded ImageView à l'intérieur de CardView

    Essayez votre back.xml quelque chose comme ça.

     <?xml version="1.0" encoding="UTF-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <solid android:color="#ffffffff"/> <stroke android:width="3dp" android:color="#ff000000" /> <padding android:left="1dp" android:top="1dp" android:right="1dp" android:bottom="1dp" /> <corners android:bottomRightRadius="7dp" android:bottomLeftRadius="7dp" android:topLeftRadius="7dp" android:topRightRadius="7dp"/> </shape> 

    J'ai eu un problème similaire aujourd'hui que mon image était une carte Google. Vous devez cacher les coins et la façon de le faire est de créer un 9Patch comme le suivant:

    Entrez la description de l'image ici

    Et appliquez-le en arrière-plan sur toute votre mise en page ou une autre disposition couvrant votre mise en page. Consultez le lien suivant pour plus d'informations:

    Existe-t-il un moyen d'implémenter des coins arrondis dans un Mapfragment?

    J'ai officiellement visité ce site: http://www.sumopaint.com/app/
    Et tout peint à la main, vous pouvez prendre mon exemple et changer les couleurs à votre goût. Vous auriez probablement besoin de la suivante:

    Entrez la description de l'image ici

    Vous pouvez obtenir plus d'informations sur la création de 9Patchs dans les liens suivants:

    http://radleymarx.com/blog/simple-guide-to-9-patch/

    http://android9patch.blogspot.co.il/

    Ok essayons en bas

      <?xml version="1.0" encoding="utf-8"?> <shape android:shape="rectangle" xmlns:android="http://schemas.android.com/apk/res/android"> <corners android:radius="30dp"/> <stroke android:width="2dp" android:color="#000000"/> </shape> <LinearLayout android:id="@+id/frame1" android:background="@drawable/corner_background" android:layout_width="fill_parent" android:layout_height="wrap_content" android:padding="5dp" > <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/background" /> </LinearLayout> 
     <?xml version="1.0" encoding="utf-8"?> 

     <item> <bitmap android:src="@drawable/bg_striped_img" android:tileMode="repeat" /> </item> <item android:left="-20dp" android:top="-20dp" android:right="-20dp" android:bottom="-20dp"> <shape android:shape="oval" > <stroke android:width="20dp" android:color="#ffffffff" /> <solid android:color="#00000000" /> <size android:height="120dp" android:width="120dp" /> </shape> </item> <item > <shape android:shape="oval" > <stroke android:width="1dp" android:color="#ff999999" /> <solid android:color="#00000000" /> <size android:height="120dp" android:width="120dp" /> </shape> </item> 

    Passez le bitmap d'origine à la fonction suivante et vous obtiendrez un bitmap arrondis en résultat :). J'espère que ça aide quelqu'un.

      public Bitmap getRoundedBitmap(Bitmap bitmap) { Bitmap resultBitmap; int originalWidth = bitmap.getWidth(); int originalHeight = bitmap.getHeight(); float r; if (originalWidth > originalHeight) { resultBitmap = Bitmap.createBitmap(originalHeight, originalHeight, Bitmap.Config.ARGB_8888); r = originalHeight / 2; } else { resultBitmap = Bitmap.createBitmap(originalWidth, originalWidth, Bitmap.Config.ARGB_8888); r = originalWidth / 2; } Canvas canvas = new Canvas(resultBitmap); final Paint paint = new Paint(); final Rect rect = new Rect(ConstsCore.ZERO_INT_VALUE, ConstsCore.ZERO_INT_VALUE, originalWidth, originalHeight); paint.setAntiAlias(true); canvas.drawARGB(ConstsCore.ZERO_INT_VALUE, ConstsCore.ZERO_INT_VALUE, ConstsCore.ZERO_INT_VALUE, ConstsCore.ZERO_INT_VALUE); canvas.drawCircle(r, r, r, paint); paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); canvas.drawBitmap(bitmap, rect, rect, paint); return resultBitmap; } 
    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.