Bitmap con ripetizione della modalità piastrella e angoli rotondi

Ho un bitmap con il metodo degli angoli arrotondati:

Codice:

  • Effetto riflesso dell'acqua sulla bitmap
  • Suggerimenti per evitare errori di bitmap fuori memory
  • Come restituire un Bitmap da un'attività di Async nell'applicazione Android
  • VideoView getDrawingCache sta tornando in nero
  • Come codificare Bitmap in un video utilizzando MediaCodec?
  • Bitmap, Bitmap.recycle (), WeakReferences e Garbage Collection
  • public static Bitmap getRoundedCornerBitmap(Bitmap bitmap, int pixels) { Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Config.ARGB_8888); BitmapDrawable TileMe = new BitmapDrawable(output); TileMe.setTileModeX(Shader.TileMode.REPEAT); TileMe.setTileModeY(Shader.TileMode.REPEAT); Canvas canvas = new Canvas(TileMe); 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; } 

    Questo sta solo rendendo l'image con angoli arrotondati e anche gli angoli non sono lisci, ora come posso fare a piastrelle con modalità di ripetizione e angoli arrotondati?

  • Parsing CDATA in android
  • FindViewById Loop
  • 2 Solutions collect form web for “Bitmap con ripetizione della modalità piastrella e angoli rotondi”

    Finalmente l'ho risolto !!!

     class CurvedAndTiled extends Drawable { private final float mCornerRadius; private final RectF mRect = new RectF(); private final BitmapShader mBitmapShader; private final Paint mTilePaint; CurvedAndTiled( Bitmap bitmap, float cornerRadius) { mCornerRadius = cornerRadius; mBitmapShader = new BitmapShader(bitmap, Shader.TileMode.REPEAT, Shader.TileMode.REPEAT); mTilePaint = new Paint(); mTilePaint.setAntiAlias(true); mTilePaint.setShader(mBitmapShader); } @Override protected void onBoundsChange(Rect bounds) { super.onBoundsChange(bounds); mRect.set(0, 0, bounds.width(), bounds.height()); } @Override public void draw(Canvas canvas) { canvas.drawRoundRect(mRect, mCornerRadius, mCornerRadius, mTilePaint); } @Override public int getOpacity() { return PixelFormat.TRANSLUCENT; } @Override public void setAlpha(int alpha) { mTilePaint.setAlpha(alpha); } @Override public void setColorFilter(ColorFilter cf) { mTilePaint.setColorFilter(cf); } } 

    applicare anche questa tua image.

     backgroundImage.setBackgroundDrawable(new CurvedAndTiled(((BitmapDrawable) drawable).getBitmap(), 45)); 

    Spero che aiuterà qualcuno in futuro.

    Happy Coding 🙂

    Provare con l'estensione BitmapDrawable e sovrascrivere il metodo paint() per impostare l'image in modalità piastrelle:

    In questo metodo evitiamo la creazione di una nuova bitmap con la dimensione della vista.

     class MyBitmapDrawable extends BitmapDrawable { private Paint mPaint = new Paint(Paint.FILTER_BITMAP_FLAG | Paint.DITHER_FLAG); private boolean mRebuildShader = true; private Matrix mMatrix = new Matrix(); @Override public void draw(Canvas canvas) { Bitmap bitmap = getBitmap(); if (bitmap == null) { return; } if (mRebuildShader) { mPaint.setShader(new BitmapShader(bitmap, TileMode.REPEAT, TileMode.REPEAT)); mRebuildShader = false; } // Translate down by the remainder mMatrix.setTranslate(0, getBounds().bottom % getIntrinsicHeight()); canvas.save(); canvas.setMatrix(mMatrix); canvas.drawRect(getBounds(), mPaint); canvas.restore(); } } 

    Può essere impostato alla vista come questa:

     view.setBackgroundDrawable(new MyBitmapDrawable(getResources().getDrawable(R.drawable.smiley).getBitmap())); 

    Controlla il suo riferimento QUI

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.